連続していない2つのコミットをまとめるにはどうすればいいですか? 質問する

連続していない2つのコミットをまとめるにはどうすればいいですか? 質問する

私は Git 内のリベース機能全般についてあまり詳しくありません。次のようなコミットを行ったとします。

A -> B -> C -> D

Dその後、には に追加された新しいコードに依存する修正が含まれており、これらのコミットは一緒に属していることがわかりました。 & をまとめて、& をそのままにするにAはどうすればよいでしょうか?ADBC

ベストアンサー1

git rebase --interactive実行してD を B の前に並べ替え、D を A に押し込むことができます。

Git はエディターを開き、次のようなファイルが表示されます。git rebase --interactive HEAD~4

pick aaaaaaa Commit A
pick bbbbbbb Commit B
pick ccccccc Commit C
pick ddddddd Commit D

# Rebase aaaaaaa..ddddddd onto 1234567 (4 command(s))
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out

ここで、ファイルを次のように変更します。

pick aaaaaaa Commit A
squash ddddddd Commit D
pick bbbbbbb Commit B
pick ccccccc Commit C

そしてgitはAとDの変更を1つのコミットにまとめ、その後にBとCをコミットします。Dのコミットメッセージを保持したくない場合は、 の代わりにキーワードsquashを使用しますfixup。 の詳細についてはfixupgit rebaseドキュメント、またはチェックアウトこの質問そこには良い答えがいくつかあります。

おすすめ記事