web-dev-qa-db-ja.com

マージ前に行われたGitコミットのメッセージを修正する

リモートブランチにマージする前に、いくつかのテストコードをコミットしました。この合併には多くの対立があり、正すのにかなりの時間がかかりました。したがって、私の履歴は次のようになります。

7ab562c Merge from remote branch
... whole load of commits brought across from the remote branch...
f3e71c2 Temporary TESTING COMMIT

テストコードは問題ありません。コミットメッセージを変更したいだけです。通常、私はgit rebase -i f3e71c2^を使用しますが(これはまだプッシュされていないため)、同僚から、これによりマージが台無しになると言われました。私は本当にマージを台無しにしたくない:)

私の同僚は正しいですか?もしそうなら、私にできることはありますか、それとも私はこの歴史と一緒に暮らす必要がありますか?

24
ChrisWard

git rebase --preserve-merges --interactive を試すことができます:

-p
--preserve-merges

マージを無視する代わりに、それらを再作成してみてください。

ManページのBUGセクションには次のものが含まれます。

--preserve-merges --interactiveによって提示されるToDoリストは、リビジョングラフのトポロジを表していません。
コミットの編集とコミットメッセージの言い換えは正常に機能するはずですが、コミットを並べ替えようとすると、直感に反する結果になる傾向があります。


jthill 's comment が説明しているように(競合の解決がレコーダーである場合、-pはマージをより適切に保持するため):

あなたは遡及的にマージのためにrerereを軽くすることができます:

git config rerere.enabled true
git checkout $merge^1
git merge $merge^2
git read-tree --reset -u $merge
git commit -m-
git checkout @{-1}
32
VonC