2

まず、お詫びする必要があります-SOには「マージを元に戻す方法」の質問がたくさんありますが、私はgitに慣れていないので、ソリューションを自分の状況に適応させる方法を本当に理解していません(私は彼らがそうすることができると確信しています)。

私には2つのブランチがversionAありversionBます。にいくつかの変更を加えてversionA、にマージしました。で行われた変更は上位互換性があるversionBため、これは問題ありません。次に、誤ってにマージしversionAてしまったに違いないと思います。これは、との下位互換性がないため、問題ありません。versionBversionAversionBversionA

どうすればこれを元に戻すことができますか?

物事をより明確にするために、これは私がしたことです:

versionA C--C--C--C'--M2
          \          /
           \        /
versionB C--M--C--C*

M: merged versionA into versionB. this is fine.
M2: accidentally merged versionB back into versionA

これが私が欲しいものです:

versionA C--C--C--C'
          \         
           \       
versionB C--M--C--C*

私がMercurialを使用している場合はhg rollback、すべてがうまくいくか、ブランチhg update C'のために将来のコミットを行いますが、これは死んだぶら下がりの頭として残ります(したがって、私はこの方法を好みます)。versionAM2rollback

ブランチM2から最後のコミットをスクラブするgitの方法は何ですか?versionA(すべての変更がプッシュされました)。

4

1 に答える 1

1

マージのコミットを見つける必要があります。

マージコミットを見つけるには、次のことを試してください。 git log versionA ^versionB --ancestry-path --merges

必要なコミットは最後のコミットです。

git revert -m 1 commit_hash

ただし、Linusの記事を読んでください:http ://www.kernel.org/pub/software/scm/git/docs/howto/revert-a-faulty-merge.txt

参照:git-revertを使用してプッシュされたマージを元に戻すコミットハッシュはどれですか?

于 2012-07-20T01:04:08.417 に答える