3

いくつかのコミットがあるとします:

<sha1> bug due to function1
<sha2> bug due to function2
... other commits

コミット 1 と 2 を一緒にスカッシュして、2 番目のコミットのメッセージのみを保持したい場合は、次のようgit rebase -iに編集します。

pick <sha1> bug due to function1
squash <sha2> bug due to function2
... other commits

そして、結合されたメッセージを常に編集して、最初のメッセージを削除する必要がありました。

fixupコミットを再配置して、次のように使用できることはわかっています。

pick <sha2> bug due to function2
fixup <sha1> bug due to function1
pick <sha3> other commit

しかし、2 つのコミットの順序を逆にすると、競合が発生する可能性があるというリスクがあります。

特に結合されたメッセージの編集を避けて、操作を減らして同じ結果を得るにはどうすればよいでしょうか。コミット 1 の前とコミット 2 の後に多くのコミットがある可能性があることに注意してください。

4

3 に答える 3

0

完全に自動化されたバージョン。次のような git 履歴があるとします。

... (as many commits as you like)
6acdc6f - commit message 3
46c9468 - commit message 2
9b28fd5 - commit message 1

次に、リベースしてコミット 1 と 2 を一緒にスカッシュし、コミット メッセージ 2を保持します。

git rebase -i 9b28fd5~

次に、次のように編集します。

pick 9b28fd5 commit message 1
pick 46c9468 commit message 2
exec HH=$(git rev-parse HEAD); git reset --soft HEAD~2; git commit -C $HH
pick 6acdc6f commit message 3

シェルコマンドの簡単な説明:

HH=$(git rev-parse HEAD) # store the HEAD sha1 in a variable; since the next call will change HEAD to HEAD~2
git reset --soft HEAD~2  # destroy the last two commits keeping the changes staged.
git commit -C $HH        # now commit all changes reusing the commit message from commit2 (using the sha1 that we saved in the variable)
于 2018-04-12T14:41:14.470 に答える