検索

ホームページ  >  に質問  >  本文

Git怎样撤销一次分支的合并Merge

合并分支后,发现合并错了分支。
master上还没有提交任何东西,想取消这次合并,让分支回到位,肿么办?

好在现在还没commit另外的内容,如果不小心commit了,那又该怎么办啊?

伊谢尔伦伊谢尔伦2810日前866

全員に返信(6)返信します

  • 黄舟

    黄舟2017-04-21 11:18:49

    git はなんとも奇妙な管理ツールです。問題にはさまざまな説明があり、どれが正しいのか一目ではわかりません。
    http://git-scm.com/blog/2010/03/02/undoing-merges.html これが正式な回答です。読み終わったら、ここに翻訳します。

    ====================== 簡易翻訳開始====================

    マージを元に戻す方法について質問する人が多すぎたため、git は、git の既存のイデオロギー システムの下でマージを元に戻すという目標を達成する方法を示すこのチュートリアルを公式に発行しました。

    方法 1、マージ前のバージョンにリセットし、次の操作をやり直すには、各コラボレータがローカル HEAD をロールバックする方法を知っている必要があります。 リーリー

    方法 2、マージ後に他の操作や変更がある場合、git にはマージを元に戻す方法もあります。git revert を使用します。 リーリー これにより、対応するマージ操作をオフセットする新しいコミットが作成され、後で git merge [その番号で表されるブランチ] がプロンプトを表示します:

    リーリー

    方法 2 を使用すると、git がこのブランチ内のものが望ましくないものであると誤って認識するためです。

    方法 3

    、方法 2 をキャンセルする方法: リーリー これで、正常にマージできますが、多くの競合が発生する可能性があります。 !

    リーリー

    ======================簡易翻訳終了====================

    結局、上の方は全部めんどくさいと今でも思ってます。 WebStorm を使用してフロントエンドでコードを毎日書いている人は、ぜひご覧ください: WebStorm プロジェクト ファイルまたはフォルダーを右クリックすると、次のものが表示されます:

    地元の歴史 -> 歴史を表示

    クリックすると、ローカルの変更をすべて確認できるウィンドウが表示されます。適切なものを見つけて、左上隅にあるものを押します:

    元に戻す

    小さな紫色の曲線矢印である

    ボタンは、「戻る」ボタンです。ファイルサイズが大きくない場合に非常に便利なので、強くお勧めします。

    返事
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-21 11:18:49

    このマージのコミットを確実に放棄する場合、間違ったブランチを master にマージした場合は、まず git reflog または gitg、gitk、qgit、その他のツールを使用して、master が以前にあったコミットを特定します。マージしてから、master ブランチで git replace --hard <commit> を使用してヘッド ポインタをリセットします。一般に、マスター上で git replace --hard HEAD~ を直接実行すると、マージ前のコミットに戻ることもできますが、それでも git replace --hard を使用することをお勧めします。 > コマンドも実行します。現在の送信を放棄することが確実でない限り、git restart --hard コマンドは危険であることに注意してください。最初に git ブランチ を新規作成することをお勧めします。現在の送信のブランチ参照。すべてが正しいことを確認するまで続行してから、削除します。 git reflog 或者 gitg、gitk、qgit 等工具确定你 merge 之前 master 所在的 commit,然后在 master 分支上使用 git reset --hard <commit> 重置头指针。一般来说,在 master 上直接执行 git reset --hard HEAD~ 也可以回到合并之前的提交,但 git reset --hard 命令还是使用确定的 commit 为好。注意,git reset --hard 命令有风险,除非十分确定要放弃当前提交,否则最好先 git branch 为当前的提交建立个新的分支引用后再继续,待确定无误后删除即可。

    如果错误的合并之后又有了新的提交,可以在完成前述正确的合并之后,通过 git rebase --onto <错误的合并提交> <正确的合并提交> <新提交所在分支> 来在正确的合并提交上重建新的提交。git rebase --onto 命令所重建的提交序列最好是线性的,否则非线性的提交会变成线性的。若需要保存非线性的提交历史,可以考虑使用 --preserve-merges

    間違ったマージの後に新しいコミットがある場合は、git rebase --onto <correct merge commit<前述の正しいマージの完了後に > を渡すことができます。 code> を使用して、正しいマージ コミットで新しいコミットを再構築します。 git rebase --onto コマンドによって再構築されたコミット シーケンスは最も線形ですが、それ以外の場合は非線形コミットが線形になります。非線形コミット履歴を保存する必要がある場合は、 --preserve-merges パラメーターの使用を検討できますが、コミットの非線形性の程度によっては、結果の信頼性が非常に低くなります。 🎜

    返事
    0
  • PHPz

    PHPz2017-04-21 11:18:49

    B-R-A-N-C-H
    / --マージ
    M-A-S-T-E-R----M

    git replace --hard R のハッシュ値を使用して R に戻ることができます。 マージ後に M から R に戻ります。

    返事
    0
  • 高洛峰

    高洛峰2017-04-21 11:18:49

    ここでは git merge --abort が必要だと思います

    返事
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-21 11:18:49

    マージ中に競合が発生し、操作をキャンセルしてインデックスを復元したい場合は、 git merge --abort を使用してください
    git replace --hard は特定のコミットにロールバックできます
    git revert はコミットを取り消すことができ、取り消すと新しいコミットが生成されます

    git rebase についてはまだ注意深く勉強していません。

    返事
    0
  • 巴扎黑

    巴扎黑2017-04-21 11:18:49

    http://opensource.apple.com/source/Git/Git-26/src/git-htmldocs/howto/revert-a-faulty-merge.txt

    翻訳する時間が誰にありますか?

    返事
    0
  • キャンセル返事