LoginSignup
5
7

More than 3 years have passed since last update.

merge、rebase実行時のコミットグラフのbefore&after

Last updated at Posted at 2019-09-16

一ヶ月前にはじめてGitを使い始めた原始人として言わせてもらうと、正直、Gitは難しい。

なぜ難しいかというと、コマンドを実行して何が起きるのか、コマンドを実行したけど何が起きたのか、裏側が見えないから。ネットで調べたコマンドを実行するものの、いったい何が起きたのかよく分からず、しばしばパニックに陥っていた。

一ヶ月経った今振り返ると、Gitの入りとしてはまず「ブランチ」と呼ばれるポインタの操作に慣れることが先ではないかと感じた。あとはgit log --graphの見方に慣れれば、独り立ちできる気がする。

そこで本記事では、merge/rebaseのコマンド実行前後でのコミットグラフを示してみた。ここに挙げたパターンで一通り練習すれば、Gitに対する恐怖感も薄れて、パズルを解くようなポインタ操作の楽しさに目覚めるかもしれない(僕はそれになった)。

(1) No-FF マージ

masterブランチ(カレントブランチ)に、parentブランチとchildブランチを合流させる。

git merge
git checkout master
git merge parent child

before

image.png

after

image.png

(2) Fast Forwardマージ

git merge
git checkout master
git merge parent

before

image.png

after

image.png

(3) 基本的なリベース

git rebase master parent

または

git checkout parent
git rebase master

before

image.png

after

image.png

(4) 子連れブランチの子ブランチをスライスしてリベース

masterブランチからchildブランチを生やすつもりだったが、誤ってparentブランチから生やしてしまった。masterブランチに移植したいケースで使用する。

childブランチをparentブランチの派生元からスライスしてrebase
$ git rebase --onto master parent child

before

image.png

after

image.png

(5) 子連れブランチの親ブランチをrebase

--ontoをつけないとどうなるか?のifストーリーです。

$ git rebase master parent

before

image.png

after

image.png

(6) 子連れブランチの子ブランチをrebase

--ontoをつけないとどうなるか?のifストーリーです。

$ git rebase master child

before

image.png

after

image.png

(7) ブランチを任意のコミットに移動

開発メンバーAがparentmasterにrebaseし、origin/parentにpushしたとする。
以前からparentブランチで作業していた開発メンバーBが、origin/parentをfetchする。
すると、Bのローカルにあるparentブランチは、rebase前の古いブランチ(H)を指したままとなってしまう。

この時、単純にparentブランチをorigin/parentブランチに移動したい。
もちろん、コミットは引き連れずに、ブランチのみを移動したい。
ブランチを再作成するという手もあるけど、以下のコマンドでも実現できる。

git rebase --onto origin/parent parent parent

before

image.png

after

image.png

上ではparentorigin/parentに移動させたが、移動先にSHA1-ハッシュ値を指定して、parentが任意のコミットを指すようにすることも可能である。

git rebase --onto SHA1-ハッシュ値 parent parent
5
7
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
7