42

git log次のことを明らかにします。

commit 1abcd[...]
Author: [...]
Date: [...]

    [Useful commit]

commit 2abcd[...]
Author: [...]
Date: [...]

    Merge branch [...] of [etc. etc.]

commit 3abcd[...]
Author: [...]
Date: [...]

    [Useful commit]

そのマージコミットは私には役に立たない - それはブランチの意味のある状態を表しておらず、リモートプルから生成されたので、私はリモート履歴の本当のコミットを持っている - 私がプルしたという事実をコミットする必要はない. このマージ コミットを押しつぶしたいと思います。スカッシュを行うための私の通常のテクニックは次のとおりです。

git rebase --interactive HEAD~2(または、どこまでも遡る必要があります)

そして、それを隣接するコミットに押しつぶします。たとえば、コミットを行ったときに、小さな重要な詳細 (単一のファイル、またはファイルの 1 行を変更していない) を見逃したことに気付き、別のコミットを行う場合に、これを何度か行います。そうすれば、変更をリモートにプッシュして戻すと、すべてがきれいに整理され、まとまりのある物語が語られます。

しかし、この場合、git rebase ...コマンドを実行すると commit2abcdが表示されません。すぐにスキップするようで2abcd、代わりに1abcdandが表示されます3abcd。マージ コミットが に表示されないようにする特別な点はありgit rebase --interactiveますか? そのマージコミットを押しつぶすために他にどのような手法を使用できますか?

@Cupcakeのリクエストごとに更新:

の出力はgit log --graph --oneline --decorate次のようになります。

* 1abcd (useful commit)
* 2abcd (merge)
|  \ <-- from remote
|   * 3abcd (useful commit)
|   |

役に立った?

4

2 に答える 2