0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Gitで過去のコミットをまとめる+ブランチを付け替える方法

Posted at

#はじめに
(Git初心者なので内容が間違ってても大目に見てください)

ごく稀に(特に一人で作業をしていたり、ローカルで作業したりなど)過去にコミットした内容をまとめたくなる時が出てくると思います。
このような時、通常はgit rebase -iでコミットをマージしていくのが一般的です。
この辺りの方法は世の中に溢れているので、ググってみてください。
https://qiita.com/tsuuuuu_san/items/f708a9f7ea8ab8eb6945
http://www-creators.com/archives/2850

#困りごと
が、しかし!!まとめたいコミットのツリーの途中にブランチが切られている場合、git rebase -iを行うとカオスな状態になってしまいます。
ちょっと何言ってるか分からないと思うので実際の事例を見ていきたいと思います。
スクリーンショット 2020-06-12 16.03.29.png
今、masterの最初の方に作られたコミットadd cadd dをまとめたいとします。
なお2個前のコミットでbranchという名前でブランチが切られています。
この状態でgit rebase -iを実行してみましょう。

terminal
git rebase -i HEAD~5 //5個前まで遡って修正する

pick 5b22e12 add c
squash 0365976 add d //これを直前のコミットと一緒にしたい
pick 591e2e8 add e
pick 804ff18 add f
pick 015ce44 add g

add c and d //という名前にする

そうすると結果は…
スクリーンショット 2020-06-12 16.03.29.png

$\Huge{Why\ Git!!!!!!!!}$

#Gitは悪くなかった
本来add eでブランチされるはずのbranchadd bでブランチされてしまっています。
一体何が起きているのでしょうか?

実はこれ、add cadd dがまとめられたmasterのツリーを新たにadd brebaseしているんです。
rebaseのやっていることは以下を参考にするとわかりやすいです。
https://www.slideshare.net/kotas/git-15276118
理由は分かったけれど、求めたいた形と違いますね。
そこでbranchの接続元をmasterツリー内のadd eに接続し直すことで元の状態に戻してあげます。

#救世主 git rebase --onto
ブランチを付け替えるにはgit rebase --ontoを使います。
こちらの解説は以下の記事が分かりやすかったです。
https://gist.github.com/hankei6km/4301ebc7e320b987de1f7a5b0acb994a

今やりたいことは、branchのコミット名add f-bmasterのコミット名add eに付け替えることです。
ここで文法をおさらいすると、
git rebase --onto A B C
A : 付け替え先のコミット名
B : 付け替える前の分岐元のコミット名
C : 付け替えたいブランチ名

今回の例に当てはめてみると、
A : master内のadd e(=3298c46)
B : branch内のadd e(=591e2e8)
C : branch

となります。では早速実行してみましょう。

terminal
git checkout branch //masterからbranchに移動(これが必要かどうかは不明・・・)
git rebase --onto 3298c46 591e2e8 branch

結果を見てみると・・・

上手くいきました🤗
(branchとmasterの色と場所が変わっているのは目を瞑ってください、GitUpの仕様です)

#最後に
もう少し良い方法がある気がします・・・もし知っている方教えてください。
また、過去のコミットを修正するのはあまり良くないのでは?と思うので使用はほどほどに。

0
1
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?