3

次のようなリポジトリがあるとします。

I --- C --- M    master
  \       /
   `- A -´       topic

に組み込まれてMいるマージ コミットはどこにありますか。topicmaster

後で にバグを見つけたので、ブランチC上で修正するコミットを作成します。masterM

I --- C --- M --- C1    master
  \       /
   `- A -´              topic

しかし、理想的には、履歴を次のようにしたいと思います。

I --- C --- C1 --- M    master
  \              /
   `- A --------´       topic

C1マージ前に表示されるように履歴を書き換えるにはどうすればよいMですか?

を削除Mし、 によって作成されたパッチを適用し、再度C1マージtopicしてmaster、すべての競合を解決することもできますが、この作業は避けたいので、元のコミット情報 (作成者、日付など) を保持したいと思います。可能であれば、git commit再度行うことを除外します。で可能git rebaseだといいのですが、 と のどちらかまたは両方で失敗し-pまし-iた。

4

3 に答える 3

2

これは、単一のリベースでコミット (または任意の数のコミット) を移動してから、トピックからのマージをやり直すことで実行できます。

# Create some branches just for readability
git branch mergeCommit master^
git branch beforeMerge master^^

# Run the rebase
git rebase --onto beforeMerge mergeCommit master
# After the rebase master will have the replayed commits on top of C

# Redo the merge
git merge topic

このリベースを使用すると、マージ前に複数のコミットを移動できます。計画英語でのリベース命令は次のように読むことができます。

からコミットmergeCommitmaster取得し、 の上にリベースしますbeforeMerge

于 2014-01-22T01:33:35.613 に答える