提交所有更改后再进行拉取操作,为什么?

3

在分支上工作时,我会有几个需要更改的文件。 我的其中一位同事告诉我他已经推送了一个更改,让我拉取以解决紧急问题。 如果我不提交我的更改,则Git将不允许我拉取。 尽管我修改的文件中没有任何被更新的文件。

我想知道为什么会出现这种情况,如果可能的话,是否有避免这种情况的方法?


你能否再添加一些信息,例如你是否已经配置了分支以便在拉取时进行变基或合并? - robinst
4
你可以执行 git stash; git pull; git stash pop - JoshRagem
我还没有配置任何东西。只是一个简单的分支和检出。我知道我可以使用stash。我想知道是否有更有效或更好的方法。 - Gregg
你必须要储藏或提交更改。不能在工作目录不干净的情况下进行拉取操作。我会将JoshRagem的评论点赞为答案。 - KurzedMetal
这是为什么这样的情况还是只是“按照编写方式工作”的结果? - Gregg
你可以使用 git fetch 而不是 git pull,然后在你自己的目录中更方便的阶段(即在提交后立即拥有一个干净的工作目录)手动运行 git merge - twalberg
1个回答

5

git pull 本质上是一次获取(fetch)和合并(merge)的操作。合并通常要求工作目录处于干净状态,这样做是为了你的安全:

警告:不建议在有未提交更改时运行 git merge:虽然可能性存在,但会让你处于一个很难回退冲突状态的地步。(来源

而且:

如果任何远程更改与本地未提交更改重叠,则合并将自动取消,并保持工作区不变。通常最好先完成所有本地更改再进行拉取(pull),或使用 git-stash 存储它们。(来源

我认为,在纯粹的 git merge 中的检查实际上比 git pull 更容易原谅,因此你可能想尝试先获取(fetch),然后手动合并(merge)。但最好的方法始终是先存储起来。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接