1. ホーム
  2. ギット

[解決済み】2つの連続しないコミットをつぶすには?

2022-04-04 08:48:20

質問

gitのリベース機能については、ちょっと初心者なんです。 例えば、以下のようなコミットを行ったとします。

A -> B -> C -> D

その後、気がつくと D で追加された新しいコードに依存する修正が含まれています。 A で、これらのコミットは一緒になっています。 どのようにすれば A &です。 D を一緒に残して B & C のみですか?

解決方法は?

を実行することができます。 git rebase --interactive で、DをBの前に並べ替え、DをAにつぶす。

Git がエディタを開くと、このようなファイルが表示されます、ex: 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 の変更をひとつのコミットにまとめ、B と C をその後に置くようになりました。D のコミットメッセージを残したくない場合は、代わりに squash を使用します。 fixup キーワードを使用します。の詳細については fixup を参照してください。 git rebase ドキュメント をご覧ください。 この質問 には、良い回答がいくつもあります。