新しい開発者が大きなgitリポジトリに夢中になり、 彼のすべての変更を捨てることができます。Git分岐が分岐した - 変更を元に戻す
私の問題:私たちのgit hosterはpush --forceを許可していないので、最初にプルする必要があります。
私がそうした場合、私はたくさんのマージと競合があり、解決には何の意味もありません。 他の人が行った変更を元に戻すための最良の方法は何ですか?
新しい開発者が大きなgitリポジトリに夢中になり、 彼のすべての変更を捨てることができます。Git分岐が分岐した - 変更を元に戻す
私の問題:私たちのgit hosterはpush --forceを許可していないので、最初にプルする必要があります。
私がそうした場合、私はたくさんのマージと競合があり、解決には何の意味もありません。 他の人が行った変更を元に戻すための最良の方法は何ですか?
にあります。
私は同じ状況にある他の人のために私のソリューションをここに掲載しています。 これはおそらく簡単な方法なので、ご存じの方は、お気軽に投稿してください。
まず、すべての変更をコミットして、作業ディレクトリがきれいになるようにします。変更が残っていないことをgit statusで確認してください。
次に、新しい一時ブランチを作成して変更を保存します。
git branch tmp
最後に、あなたとリモートブランチが分岐したことがわかります。 63da978a9a4620790b75dfbae86d658a65dc3e25のようなコミットハッシュが必要です。
見つかったら、マスターブランチをそのコミットにリセットします。
git reset --hard COMMIT
変更をリモートから引き出します。競合は発生しません。
git pull origin master
これで、破棄する必要があるコミットを元に戻すことができます。すべての変更を使用してTMPブランチをマージバック:あなたはすべての権利を行っている場合は
git revert COMMIT1
は、プロセスを完了するだけで1最後のステップがあります。
git merge tmp
ここでも、競合が発生しましたなかったはずです。
これで、もう一度プッシュできる最新のブランチが作成されました。ハレイ!
git push origin master
競合を回避するには、をマージしないでください(git pull
)。とにかく
あなたがプッシュ--forceを使用できない場合、唯一の選択肢は私が必要なものを行うための方法を発見したgit revert
試すことができるトリックがあります。
git push origin :master
これにより、masterというブランチが効果的に削除されます。いいことは、あなたはそれを行う許可を必要としないことです(私が知っている、奇妙なことです)。
ことを行うのならば、あなたはそれがあなたのリポジトリ上にあるように正確masterブランチを再作成します
git push origin master:master
これを行うことができます。
競合/マージを処理する必要はありません。 これは決して使用されるべきではありません(あなたの場合を除いて、それは簡単な方法です)。
このトリックでは、この開発者が行ったすべてのコミットを取り除くことができます(それらのトレースは一切ありません)。
は、その行うには、「通常」の方法があります:
悲しいことに、私のGitのホスティング業者は、マスターブランチのリモート削除も防止しているので、私の場合はうまくいきません。 – theduke
ああ、それは変だけど、マージされていないブランチは削除できますか? (あなたの質問には関係ありません、ちょうど好奇心から外れています) –
あなたのgitホストは何ですか? – CharlesB
http://beanstalkapp.com – theduke