展示事件顺序的 GIF
我创建一个分支foo
,更改文件,然后在不提交更改的情况下 checkout master
。 GIT 让我进行 checkout ,并且修改会被结转。
我提交了此更改。
切换回分支foo
,更改文件——巧合的是,使其与 master
中的版本相同。 -- 然后在不提交更改的情况下我 checkout master
。这次我收到错误“错误:您对以下文件的本地更改将被 checkout 覆盖:index.html 请在切换分支之前提交您的更改或存储它们。正在中止”
造成这种不一致行为的原因是什么?
最佳答案
这是对分支的作用及其工作原理的误解。
您 checkout 一个分支,对与该分支相关的文件进行更改,但是您没有在该分支中提交该更改。您所做的更改位于您的中未提交的文件空间。这意味着,只要您的文件不与另一个分支冲突,Git 将允许您随身携带未提交的更改。
如果将文件添加到索引,则在切换分支时应该会收到如下消息:
M foo
这意味着文件 foo
已被修改,这是您的视觉提示。
既然您已经切换回其他分支,并且编辑了具有相同内容的同一文件,Git 无法跟踪该情况,因为您还没有真正告诉它。在 Git 看来,您对同一个文件创建了两个完全不同的修订版,这会导致冲突。
我的建议:
- 在
foo
分支中提交更改 - 将更改 merge 到
master
既然你处于这种状态...
- 将 master 重新设置为 foo 以确保它们的历史记录保持一致
关于GIT 允许我 checkout 具有未提交更改的另一个分支,并更改该分支中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44347547/