Git:使用修改后的工作树和索引进行git checkout

时间:2012-10-31 19:56:08

标签: git

我希望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中所做的所有工作树/索引更改都保留在分支br2中,因为git status上的br2不会给出干净的消息。我想这是因为br1br2的头部最初具有相同版本的文件foo,而Git可以自动检测到这一点。

问题:

  • Git什么时候决定不闪存工作树和索引?还有其他角落案件吗?

1 个答案:

答案 0 :(得分:5)

git checkout命令实际上有两种不同的(常见)操作模式。

  1. 如果您运行git checkout <branch>,则会切换到分支<branch>。将保留对工作树的所有更改 - 这通过将未提交的更改合并到目标分支来工作,因此它可能会失败。索引的变化将被隐藏。

  2. 如果你运行git checkout <path>,那么git将通过从当前提交中获取它们来消除索引和工作副本中对<path>的更改。

  3. 因此,如果您确定所做的更改实际属于不同的分支,则git checkout <branch>的目的就是这样。