【发布时间】:2017-11-04 23:08:18
【问题描述】:
展示事件顺序的 GIF
我创建了一个分支foo,更改了一个文件,然后在不提交更改的情况下签出master。 GIT 让我进行结帐,然后进行修改。
我提交此更改。
切换回分支foo,更改一个文件——巧合的是,它与master 中的版本相同——然后不提交更改,我签出master。这次我收到一个错误“错误:您对以下文件的本地更改将被结帐覆盖:index.html 请提交您的更改或存储它们,然后才能切换分支。中止”
造成这种不一致行为的原因是什么?
【问题讨论】:
-
答案有点偏离主题,这是重复的,所以我不会添加任何答案,但长话短说:
master和foo指向相同的提交和您在测试中的更改。在foo和master之间切换时,txt 不会与任何其他更改发生冲突,因此您可以切换并保留更改。 -
@ThibaultD。我不明白为什么我不能切换第二次。案例 #1:
master中没有未提交的更改,切换到foo,更改文件,切换回master。案例 #2:master中没有未提交的更改,切换到foo,更改文件,不会让我切换回master。有什么不同? -
因为现在
foo和master不再指向同一个版本。此外,master有一个更新的提交,包括对文件test.txt的更改,这与您在test.txtwhile on 分支 foo 中未跟踪的更改冲突。 Git 只会帮助您合并已提交的更改,因此它不能也不会尝试解决由未处理的更改引起的冲突。 -
在分支之间切换时,您不应该有未提交的更改。考虑一个事实,您实际上可以在分支之间切换作为一个例外。此例外要求两个分支共享一个共同的祖先,并且没有未提交的更改与您要签出的分支上的后续更改发生冲突。
标签: git