10

master と dev の 2 つのブランチを持つレポがあります。master ブランチで作業していてプルしたところ、レポが最新であるというメッセージが表示されました。変更をコミットし、リモート リポジトリ (github 上) にプッシュしました。一部の変更が拒否されたというメッセージを受け取りました。

それから私は を実行しましたがgit pull origin dev、これはどうやら間違ったことでした。これは dev ブランチを私のマスターとマージしたためであり、馬鹿のように、もう一度プッシュするまでこれに気づきませんでした。したがって、最後のコミットはMerge branch 'dev' of github.com:myuser/myrepo.

[sha] をマージ前のコミットとして、ローカル リポジトリで最後に確認された良好な状態に戻すことができますgit reset --hard [sha](ただし、その変更をオリジンに加える方法はわかりません)-- または何から私はまた、git revert -mその変更をコミット/プッシュすることもできると読みました。

誰かが「正しい方法」でマージを元に戻し、両方のブランチをマージ前の場所に戻すことができますか?

ありがとうございます。これは開発者が 2 人しかいない共有リポジトリであるため、大きな変更はありません。

編集して追加: 私が子供であるかのように話しかけてください。私は、この Git にまだ混乱していることを認めなければなりません。ありがとう

4

2 に答える 2

20

git reset --hard [sha]、ローカル リポジトリのブランチを修正します。このプッシュを強制的に機能させるには、git push origin +master:master. + 記号は、非線形プッシュを強制的に機能させます。

他の開発者が既に間違ったコミットをプルしている場合、マスター ブランチにいて、他のコミットを行っていない場合、彼らは を実行しgit remote update、次に(を実行する必要があります。git reset --hard origin/master

これらのコマンドは注意して使用してください :-)。幸運を。

于 2011-03-15T18:51:25.163 に答える
2

FelipeFG の答えは、他の人のローカル リポジトリのやり直しを簡単に調整できる 2 人の開発者のコ​​ンテキストでうまく機能しますが、実際にはgit revert -m<parent id of mainline branch, 1 in this case> <commit ref>. 次に、修正が完了したら、git revert <revert commit>, and git merge dev(この場合、元に戻すことが重要です。そうgit merge devしないと、古いマージが祖先と見なされず、解決する必要がある競合が発生するためです)。

履歴は醜いものになりますが、早送りもサポートされます。また、履歴の改訂のおかげで、ローカル競合の混乱を解きほぐすことを心配する必要はありません。

詳細については、 http://opensource.apple.com/source/Git/Git-26/src/git-htmldocs/howto/revert-a-faulty-merge.txtを参照してください。

于 2012-08-24T23:22:06.110 に答える