我希望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
Run Code Online (Sandbox Code Playgroud)
现在,所有的分支上的工作树/指数的变化br1保持在分支br2,作为git status上br2不会给人干净的消息.我想这是因为头部br1并且br2最初具有相同版本的文件foo,而Git可以自动检测到这一点.
题:
该git checkout命令实际上有两种不同的(通用)操作模式.
如果你跑git checkout <branch>,那么你将切换到分支<branch>.将保留对工作树的所有更改 - 这通过将未提交的更改合并到目标分支来工作,因此它可能会失败.索引的变化将被隐藏.
如果你运行git checkout <path>,那么git将<path>通过从当前提交中获取它们来消除索引和工作副本中的更改.
因此git checkout <branch>,如果您确定您所做的更改实际上属于不同的分支,则目的就是这样.