LoginSignup
5
5

More than 5 years have passed since last update.

Gitあれこれ ~其の弐~

Last updated at Posted at 2018-05-22

git pull

git pull は、ローカルリポジトリとリモートリポジトリの関係性だけを見ると git push の逆ですが、実際はgit fetchgit mergeを行っています。
git fetchとは、リモートリポジトリの最新状態をローカルに反映させるコマンドです。
ただ実際に更新されているのはmasterブランチではなくorigin/masterなので
以下のコマンドでmasterorigin/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

隠していた変更を元に戻して、該当するスタッシュを削除する場合。要はapplydropを一気に行うということですが、慎重な人は使わないほうがいいかもです。
=> $ git stash pop stash_number

git rebase

git rebase はブランチの変更点を別のブランチに統合する方法の一つです。
二つのブランチの終点を統合するマージとは違い、
一方のブランチの終点を、もう一方のブランチの始点に統合します。

A__B__C_____________F__ (master)
         \
          \
           \__D__E_____ (branch_1)

上記の場合、以下のコマンドで branch_1master にマージすると、
$ git checkout master
$ git merge branch_1

A__B__C_____________F_________ (master) 
         \               /
          \             /
           \__D__E_____/

このようになります。
一方で以下のコマンドで、 branch_1master にリベースすると、
$ git checkout branch_1
$ git rebase master

A__B__C__F________________ (master)
           \
            \
             \__d__e_____ (branch_1)

このようになります。(枝分かれしているので解りづらいですが、コミット中心の視点で見ると二つのブランチの変更は統合されました。)まだあまり利用していないが、単純に変更を統合したい時よりもコミットやブランチを綺麗にしたい時に有効なのかな、という印象です。ただしrebaseをすると統合したブランチの過去のコミットは書き換わって新しいコミットインスタンスが生成されてしまいます。なのでgit rebase後にローカルリポジトリをリモートリポジトリへgit pushする場合は-fオプションが必要になります。

gitはほぼ初心者なので誤りなどあれば指摘していただけるとありがたいです。
よろしくお願い致します。

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5