8

beta ブランチを master ブランチにマージしました。原点に押し込みました。私は今、マスターをローカルとリモートの両方で合併前の状態にしたいと考えています。

すでにプッシュされたマージを元に戻すための良い答えは、

git revert -m 1 commit_hash

これが実際に進むべき道である場合、どのようにcommit_hashを決定できますか? merge-baseによって返されたハッシュを試してみましたが失敗しました:

$ git merge-base --all master beta
1f4b949b7ef97abf913ae672e3acd0907abfac1b
$ git revert -m 1 1f4b949b7ef97abf913ae672e3acd0907abfac1b
error: Mainline was specified but commit 1f4b949b7ef97abf913ae672e3acd0907abfac1b is not a merge.
fatal: revert failed

ブランチの git-log と gitk の両方のレンディションを調べましたが、それらは非常に長く、おそらくより大きな混乱を招く前に助けを求める必要があると感じるほど、解釈が不確かです。ベータ版は、マスターから派生した v2 から派生しました。新しいブランチを master で最新の状態に保つため、途中で master から v2 および beta へのマージがいくつかありました。beta から master への方向の合併は、私が訂正したい間違いでした。

マージ ポイントを決定したら、マージ後に master で行われたコミットが実際にはベータ ブランチにあるはずのコミットを見つけた場合、それらを移動する最善の方法は何ですか?

4

2 に答える 2

5

マージのコミットを見つける必要があり、マージをgit merge-base実行できるコミットを教えてくれます。これは基本的に、これら 2 つのブランチに存在する最後のコミットです。マージ後に新しいブランチを作成しない限り、マージ コミットはマスター ブランチにのみ存在しますが、ここでは関係ありません。:)

マージコミットを見つけるには、次を試してください: git log master ^beta --ancestry-path --merges

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

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

于 2012-07-19T15:59:16.283 に答える