2013-05-14 6 views
23

リモートブランチでマージする前にテストコードをコミットしました。このマージには多くの矛盾があり、真剣に正しい時間を置いていました。だから私の歴史は次のようになります。マージの前にGitコミットのメッセージを修正する

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

テストコードは結構です、私は本当にただコミットメッセージを変更したいです。通常は私はgit rebase -i f3e71c2^(まだこれのどれもプッシュされていないので)を先に進めたいと思いますが、私は同僚からこれがマージを混乱させると言われています。私は本当にマージを台無しにしたくないです:)

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

+2

'git commit --amend'? – kan

+2

@kan:最新のコミットを修正するためにのみ動作しますが、これはここでの状況ではありません。 – kampu

+4

恐怖感が少ない!もしあなたがうまくいけば、ちょうど 'git reset --hard 7ab562c'があなたのpost-merge状態に戻り、やり直してください。また、 'git rerere'をチェックして、マージの競合を解決する方法を覚えておいてください。 – chrisk

答えて

31

あなたはと、git rebase --preserve-merges --interactiveを試すことができます。

-p 
--preserve-merges 

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

manページのBUGセクションが含まれています:--preserve-merges --interactiveが提示し

ToDoリストは、リビジョングラフのトポロジーを表すものではありません。
コミットの編集とコミットメッセージの再編集はうまくいくはずですが、コミットの順序を変更しようとすると直観に反する結果になりがちです。


jthillcommentは説明したよう

(競合解像度が記録した場合 -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} 
+0

ありがとうございました@VonC、悲しいことに、これは私にとってはうまくいきませんでした。私はテストコミットを 'reword 'し、' pick'してマージを行い、11つの衝突するファイルを投げて、マージに依然として絞り込みを止めました。私は@ chriskの 'git reset'提案を使って、私がどこにいたのかを知りました。私はそこに残すことにします。投資した時間は、この場合修正する価値はありません。 – ChrisWard

+0

@ChrisWardこれは、マージの解決を記録するために 'rerere'(http://git-scm.com/docs/git-rerere)を起動する必要があることを意味します。*リベースすることを許可します。--preserveマージしてください。 – VonC

+0

私は 'rerere'をオンにして、' rebase'をもう一度試しました。 'rebase'がマージコミットになると、私は' rerere'がプリイメージを記録し、マージ競合が雨が降っているのを見ることができます。私は 'rerere'をオンにしなかったのでこれをやっていると思います元の紛争解決を行ったので、どのように問題を解決したのか分かりません。 'rerere'は既に解決されたコミットからそのデータを集めることができるでしょうか? – ChrisWard

-3

Ifとあなたの同僚がf3e71c2の変更のontopを他の場所にプッシュ/プルしていない場合、これは機能します。それ以外の場合、私は何が起こるか分からない。コミットメッセージを変更することは、あなたがまだ修正したくないコミットを編集していないことを考えると、完全に美容的です(==メタデータの変更)。しかし、履歴の一部をプッシュ/プルしても履歴の混乱を招く可能性がありますそれはその上にある。

(おかげでこの障害モードを指摘しAbizernする)

+2

メッセージはコミットオブジェクトの一部であり、不変です。メッセージを変更すると、コミットが変更され、履歴が変更されます。 – Abizern

+0

@Abizern:それは本当です。ただし、コミットがすでに別の場所にプッシュされている(関連していない)場合にのみ関連します。私はローカルでこの戦略がこの状況で機能することを確認しました。 – kampu

+0

@Abizern:しかし、私は、他の人がすでにその間に他のトップコミットをプッシュしている可能性があるとは考えていなかったと思います。おそらく失敗/履歴の混乱の原因になるので、私はそれに応じて編集しました。 – kampu

関連する問題