5

作業ツリーとインデックスの両方をバージョンgit checkout <commit>にフラッシュすることを期待しています。<commit>ただし、場合によっては、現在の変更が作業ツリーとインデックスの両方に保持されます。例えば:

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保持されます。これは、との head がもともと同じバージョンの file を持っていて、Git がこれを自動的に検出できるためだと思います。br2git statusbr2br1br2foo

質問:

  • Git が作業ツリーとインデックスをフラッシュしないと決定するのはいつですか? 他にコーナーケースはありますか?
4

1 に答える 1

5

このgit checkoutコマンドには、実際には 2 つの異なる (共通の) 操作モードがあります。

  1. を実行するgit checkout <branch>と、ブランチに切り替わります<branch>。作業ツリーへのすべての変更が保持されます。これは、コミットされていない変更をターゲット ブランチにマージすることで機能するため、失敗する可能性があります。インデックスの変更は隠されます。

  2. を実行するgit checkout <path>と、git は<path>現在のコミットから変更を取得して、インデックスと作業コピーの両方の変更を消去します。

の目的git checkout <branch>は、行っている変更が実際には別のブランチに属していると判断した場合です。

于 2012-10-31T20:02:03.573 に答える