git checkout <commit>
は、作業ツリーとインデックスの両方を<commit>
バージョンにフラッシュすると思います。ただし、場合によっては、作業ツリーと索引の両方に現在の変更が保持されます。たとえば、次のようにきれいなメッセージを与えることはありませんgit status
br2
のよう Git:作業ツリーとインデックスを変更したgit checkout
git branch br1
git branch br2
git checkout br1
<make change M1 to file foo>
git add foo
<make change M2 to file foo>
git checkout br2
は今、分岐
br1
で行われたすべての作業ツリー/インデックスの変更は、ブランチ
br2
に保存されています。私は
br1
と
br2
の頭部はもともと同じファイルの
foo
を持っており、Gitはこれを自動的に検出できるからです。
質問:
- Gitは作業ツリーとインデックスをフラッシュしないことを決定しますか?他のコーナーケースはありますか?
これはコーナーケースではなく、新しいブランチをコミットすることをコミットする前に決定することが考えられます。あるブランチから別のブランチへの切り替えが、変更されたファイルを上書きしない限り、インデックスgitの問題はブランチに切り替えるだけです。 –
@ X-Istenceしかし、gitはどうやって決定するのですか?問題は発生しません**。 – Cyker