所以,我经常遇到这个讨厌的问题,并尝试在网上寻找任何解决方案,但我不确定这是否是 git 的预期行为。
每当我有一些本地提交并且我做了一个git pull
,git 将所有其他人的提交放入我的暂存区域,以防出现合并冲突。现在,虽然冲突是在单个文件上,但我不明白为什么 git 将其他人的非冲突提交带入我的暂存区域,要求我提交它们,就好像它们是我所做的更改/提交一样。
最近,我在同事的笔记本电脑上遇到了同样的行为,我们在提交之前取消了同事未添加的所有文件,然后提交了唯一有冲突的文件。而发生的事情,却是出乎意料。 Git 显然删除了所有这些文件,撤消了所有更改,就好像我们的提交撤销了它们一样。
然而,最奇怪的是,我们查看了 Stash(我们使用 Stash 来管理中央存储库),并且我没有看到这些文件被我们在 Stash 中的提交撤消。
我不知道这是怎么发生的。有什么合理的解释吗?另外,我有时也看到 Stash 表现得很奇怪。看来不靠谱。它不会显示两次提交之间的任何更改,但有时会出现更改。我不知道这是怎么发生的,但其他人也遇到过这些问题吗?
Update:后来我意识到 Stash 并不奇怪,只是有点不直观。在进行合并时,它显示了基于两个不同父级的变化。还有一个小的下拉菜单,可以让您更改父级以查看与其相对应的更改。我认为最好在这里更新一下,这样人们就不会产生误导性的想法。
您看到的暂存文件是以下结果所有的变化上次同步本地分支与远程分支之间(我猜是 master,因为你没有提到它)。
Git pull 已“获取”自您上次拉取以来的更改,然后它尝试将远程分支的本地副本合并到本地分支中。然后,它在已更改的文件之一中发生冲突。
因此它必须在合并过程中停下来询问您如何解决与一个文件的冲突。
因此,其他文件已准备好合并,已暂存,并且如果没有任何其他冲突,将会自动合并。
要完成自动合并,您需要 a) 解决冲突,然后 b) 点击提交以完成将其他人的更改合并到您的本地分支。 (有些 GUI 在您单击“我已完成解析”按钮后会自动执行提交完成步骤)
您还会注意到,在 GUI 的提交窗口中,有一条针对待处理提交的预制合并消息?它会说类似“将 origin/x 合并到 x...冲突:y”之类的内容。一旦所有更改的文件都可以添加到阶段,您就可以完成此暂停的自动提交。
所以这对我来说听起来像是预期的行为,但你只是看到了 git 内部流程之一的“内部”。
这里不需要或不涉及隐藏。尽管有些 GUI 会自动存储,但 git 本身在拉取期间并不使用存储。
注意:执行拉取操作时,本地不应有任何已更改的文件。 (即在执行任何分支操作之前将所有内容提交干净,这是一个很好的最佳实践)让 GUI 清理更改的文件是自动存储有用的时候,但当存在冲突时它仍然会变得复杂。也就是说,您需要解决冲突,然后记得弹出隐藏的内容。如果您过于依赖自动化,那么当您必须完成您不了解的自动化流程时,就会感到困惑!所以我建议始终保持工作目录干净。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)