私が知りたいのは、失われた可能性のある変更を見つけるにはどこを探すべきかということです。
地元の歴史が失われることはないとケビンが書いているのは正しい。それでも、意図的に失われますが、一部のリモート履歴が失われる可能性があります。
例
例えば:
master
D はコミットして Sにプッシュします。
- L フェッチします。
- Dは気が変わります(コミットを修正するか
master
、何らかの方法で履歴を変更します)。
- D は、変更された (非早送り)
master
を S にプッシュします。
フェッチ時に、L は「強制更新」を警告します。これは、前のブランチ ヒントがブランチ リファレンスを介して到達できなくなったためですmaster
。しかし、それはとにかくDが望んでいたことです。
何を探すべきか
ケビンの答えから:
+ 7193788...a978889 master -> origin/master (forced update)
その行は一度だけ表示されます。失われた可能性のあるコミットへの参照は 7193788 です。
探索方法
L が失われる可能性のあるものへの参照を保持したい場合、L は上記の例の問題である可能性がありますgit branch whateverbranchname 7193788
。これは、ローカル チェックアウトの現在の状態に関係なく実行できます。
またはgit checkout 7193788
、頭から離れてそれを探索するだけで、たとえばgit checkout master
マスターに戻ることができます。これには、最初にローカルの変更をコミットする必要がある場合があります。
いい練習
他のユーザーとの適切な協力なしに変更履歴を共有リポジトリにプッシュすることは悪い習慣と見なされていることに注意してください(変更をまだ共有していない人に余分な作業が発生するため)。
言い換えれば、共有リポジトリでフェッチを行っているときに「強制更新」が表示されても、誰も驚くべきではありません。誰かが悪いコミットをプッシュした場合、既存の履歴を変更するのではなく、修正したコミットをプッシュすることを検討する必要があります。または、変更された履歴をプッシュする前に、他のユーザーと合意する必要があります。後者のオプションは、パブリック リポジトリでは使用できません。