gitでマージをやり直す方法はありますか?


17

だから私はかなり大きな間違いを犯しました。私はコミットを行い、プルし、マージしました(しかし、そうしている間にコードを台無しにしました)、そしてプッシュしました。そのマージをやり直して、コードを正しくしたいと思います。これを行う方法はありますか?

私はbitbucketを使用しています。

git 

10
ご注意ください-これは実際はSOのトピックであり、移行すべきでありませ。いつかあなた自身のヘルプページを読んでみて、プログラマーがよく使うソフトウェアツールに注意してください。とはいえ、ここでも話題になっています-SwiftCore、移行されたのは気にしないでください、それはあなたのせいではありませんでした。
ボブ

回答:


13

これが「祝福された」方法であるかどうかはわかりませんが、「プッシュを強制する」などの重大なことをせずに同じ問題を解決するために私がやったことです。

履歴が次のようなものであると仮定しましょう(そしてMはフラブされたマージです):

-A--B--C--M (master points here)
  \      /
   D----E

実行git checkout -b merge_fix <commit ID E>すると、間違いを犯す前にブランチが作成されます。

-A--B--C--M (master points here)
  \      /
   D----E (HEAD and merge_fix point here)

それでは、新しいブランチでマージをやり直しましょう。だけでマージすることはできないmasterため、不良マージの前に手動でコミットを選択する必要がありgit merge <commit ID C>ます。前回と同じ間違いをしないでください。

-A--B--C--M (master points here)
  \      X
   D----E-G (HEAD and merge_fix point here)

コミットGが適切に見えると仮定して、masterブランチのトップと同期したいと思います。このコマンドはgitにmasterに加えられた変更を無視し、変更がマージ結果になるように強制します:git merge -s ours master

-A--B--C--M (master points here)
  \      X  \
   D----E-G--H (HEAD and merge_fix point here)

最後に、(再びコミットHが見栄えが良いと仮定してmaster、固定マージを含めるために早送りしたい:

git checkout master
git merge merge_fix

これは実際にmasterブランチポインタをに移動するだけですが、このH機会にASCIIアートを少しクリーンアップします。

-A--B--C--M--H (HEAD, master, and merge_fix all point here)
  \      X  /
   D----E--G

そして、あなたはそれを持っています!履歴を無効にすることなく、マージを再実行できました!


6

次のようにできます:

  1. マージする前にコミットにリセットします。
  2. マージを再度実行します
  3. 強制プッシュ

あれは:

git reset --hard SHA1
git merge branchname
git commit
git push --force remotename branchname

git push --forceリモートブランチで持っていたものは何でも書き換えられることに注意してください。そのブランチを使用している他の人もこの影響を受けます。(通常、これを行うべきではありません。)


6
ただ覚えていることはgit push --force安全ではない
Zepplock

1

git merge --abort そして、あなたは再びマージすることができます


私はちょうどメッセージ「中止する一切のマージはありません」を取得

3
これは、マージの競合がある場合にのみ実行できます。
chanchal118

なぜマイナス1?これは私を助けました。
-swdev

質問は、いつ(誤って)マージを完了してプッシュしたかに関するものだからです。
ロビングリーン

-1

あなたに役立つこの希望を確認してください

https://www.kernel.org/pub/software/scm/git/docs/howto/revert-branch-rebase.html

これはOPの質問に答えることができますが、SOではリンクのみの答えは受け入れられません。ただし、回答の中でリンクから最も関連性のある抜粋を引用できます。

このリンクは質問に回答するかもしれませんが、回答の重要な部分をここに含め、参照用のリンクを提供する方が良いでしょう。リンクされたページが変更されると、リンクのみの回答が無効になる可能性があります。
プラナフ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.