在分支上工作时,我会有几个需要更改的文件。 我的其中一位同事告诉我他已经推送了一个更改,让我拉取以解决紧急问题。 如果我不提交我的更改,则Git将不允许我拉取。 尽管我修改的文件中没有任何被更新的文件。
我想知道为什么会出现这种情况,如果可能的话,是否有避免这种情况的方法?
在分支上工作时,我会有几个需要更改的文件。 我的其中一位同事告诉我他已经推送了一个更改,让我拉取以解决紧急问题。 如果我不提交我的更改,则Git将不允许我拉取。 尽管我修改的文件中没有任何被更新的文件。
我想知道为什么会出现这种情况,如果可能的话,是否有避免这种情况的方法?
git pull
本质上是一次获取(fetch)和合并(merge)的操作。合并通常要求工作目录处于干净状态,这样做是为了你的安全:
警告:不建议在有未提交更改时运行 git merge:虽然可能性存在,但会让你处于一个很难回退冲突状态的地步。(来源)
而且:
如果任何远程更改与本地未提交更改重叠,则合并将自动取消,并保持工作区不变。通常最好先完成所有本地更改再进行拉取(pull),或使用 git-stash 存储它们。(来源)
我认为,在纯粹的 git merge
中的检查实际上比 git pull
更容易原谅,因此你可能想尝试先获取(fetch),然后手动合并(merge)。但最好的方法始终是先存储起来。
git stash; git pull; git stash pop
。 - JoshRagemgit fetch
而不是git pull
,然后在你自己的目录中更方便的阶段(即在提交后立即拥有一个干净的工作目录)手动运行git merge
。 - twalberg