強く推奨される方法は、他の場所でプッシュされ、他の人がプルするコミットの履歴を変更しないことです。とはいえ、これを理解していない人はどうしてもやってしまう。歴史を変えた本人ではなく、「他の利用者」の立場から見た場合、どのように復旧するのが最善なのでしょうか?
具体的にするための例を次に示します。
Ryan はいくつかのコミットとプッシュを作成します。
ryan $ git init
ryan $ echo "initial stuff" > file.txt
ryan $ git add file.txt
ryan $ git commit -m "Initial commit"
ryan $ echo "more stuff" >> file.txt
ryan $ git add file.txt
ryan $ git commit -m "More stuff"
ryan $ git remote add origin [some url]
ryan $ git push origin
Joe が github リポジトリのクローンを作成します
joe $ git clone [some url]
この時点で、すべてが順調です。
Ryan は最後のコミットを変更します。
ryan $ vi file.txt
ryan $ git add file.txt
ryan $ git commit --amend -m "More stuff"
ryan $ git push origin
[Fails]
ryan $ git push -f origin master
Ryan は、他の方法で失敗した後に強制プッシュを行ったことに注意してください。元から引っ張っていたのが彼だけだった場合は問題ありませんが、この場合、彼はジョーを台無しにしました。
ジョーは引っ張ろうとします:
joe $ git pull origin
[Conflict!]
これは非常に単純な例ですが、ジョーは慣れていない可能性が高くfile.txt
、変更をマージするのは難しいでしょう。
繰り返しますが、問題の根本はライアンが何か悪いことをしたことだと理解しています。それでも、Joe と彼のチームメイトがマージ コミットを行わなくても回復できる方法を探しています。
リモート ブランチのローカル コピーを削除し、オリジンから再チェックアウトするというトリックを 1 つ知っています。もちろん、これは変更がない場合にのみ機能します。Joe は、コミットしたい独自の新しい変更を加えた可能性があります。
考え?