#git pull
git pull
は、ローカルリポジトリとリモートリポジトリの関係性だけを見ると git push
の逆ですが、実際はgit fetch
とgit merge
を行っています。
git fetch
とは、リモートリポジトリの最新状態をローカルに反映させるコマンドです。
ただ実際に更新されているのはmaster
ブランチではなくorigin/master
なので
以下のコマンドでmaster
にorigin/master
をマージする必要があります。
$ git fetch
$ git checkout master
$ git merge origin/master
これでリモートリポジトリの最新状態がローカルに反映されます。
ここまでの流れを一つのコマンドで行うのがgit pull
です。
#git stash
git stash
まだコミットしていない変更点を一時的に隠すことができるコマンドです。
取り出しも自由にできるので、急な作業依頼が来てブランチを変えて別の作業をしないといけない時などに使えるらしいです(まだあまり使っていないです)。
ちなみにstashは隠す、(こっそり)しまうという意味だそうです。
使い方は、まだgit add
していない(変更点のある)ファイルがある状態で
$ git stash save
です(saveは省略可能)。このコマンドの後に
$ git status
コマンドを実行すると変更点のあったファイルがなくなっています。一時的に隠した変更の一覧は
$ git stash list
で確認できます。
stash@{0}: WIP on feature/step_7: c6c01bb commit_message_2
stash@{1}: WIP on feature/step_4: f401254 commit_message_1
隠した変更の一覧はこんな感じになっています。構成は下記の通りです。
stash_umber: WIP on branch_name: hash commit_message
コマンドは以下の通りです。
隠した変更内容の一覧を確認する場合。
=> $ git stash list -p
より詳しい変更を確認する場合。
=> $ git stash show stash_number
隠していた変更を元に戻す場合。変更を元に戻してもスタッシュ自体は消えません。
=> git stash apply stash_number
保存していた該当するスタッシュを消去する場合。
=> $ git stash drop stash_number
隠していた変更を元に戻して、該当するスタッシュを削除する場合。要はapply
とdrop
を一気に行うということですが、慎重な人は使わないほうがいいかもです。
=> $ git stash pop stash_number
#git rebase
git rebase
はブランチの変更点を別のブランチに統合する方法の一つです。
二つのブランチの終点を統合するマージとは違い、
一方のブランチの終点を、もう一方のブランチの始点に統合します。
A__B__C_____________F__ (master)
\
\
\__D__E_____ (branch_1)
上記の場合、以下のコマンドで branch_1
を master
にマージすると、
$ git checkout master
$ git merge branch_1
A__B__C_____________F_________ (master)
\ /
\ /
\__D__E_____/
このようになります。
一方で以下のコマンドで、 branch_1
を master
にリベースすると、
$ git checkout branch_1
$ git rebase master
A__B__C__F________________ (master)
\
\
\__d__e_____ (branch_1)
このようになります。(枝分かれしているので解りづらいですが、コミット中心の視点で見ると二つのブランチの変更は統合されました。)まだあまり利用していないが、単純に変更を統合したい時よりもコミットやブランチを綺麗にしたい時に有効なのかな、という印象です。ただしrebase
をすると統合したブランチの過去のコミットは書き換わって新しいコミットインスタンスが生成されてしまいます。なのでgit rebase
後にローカルリポジトリをリモートリポジトリへgit push
する場合は-f
オプションが必要になります。
git
はほぼ初心者なので誤りなどあれば指摘していただけるとありがたいです。
よろしくお願い致します。