gpt4 book ai didi

git - “git pull”在 merge 冲突期间将其他人的提交带到我的暂存区

转载 作者:太空狗 更新时间:2023-10-29 12:52:11 24 4
gpt4 key购买 nike

所以,我经常遇到这个讨厌的问题,并尝试在网上寻找任何解决方案,但我不确定这是否是 git 的预期行为。

每当我有一些本地提交并执行 git pull 时,git 会将所有其他人的提交带到我的暂存区,以防发生 merge 冲突。现在,虽然冲突发生在单个文件上,但我不明白为什么 git 将其他人的非冲突提交带到我的暂存区,要求我提交它们,就好像它们是我所做的更改/提交一样。

最近,我在一位同事的笔记本电脑上遇到了同样的行为,我们在提交之前取消了同事未添加的所有文件,然后提交了唯一有冲突的文件。而发生的事情,完全出乎意料。 Git 显然删除了所有这些文件,撤消了所有更改,就好像我们的提交撤销了它们一样。

然而,最奇怪的是,我们查看了 Stash(我们使用 Stash 来管理中央存储库),但我没有看到这些文件被我们在 Stash 中的提交撤消了。

我不知道这是怎么发生的。有什么合理的解释吗?另外,我看到 Stash 有时表现得很奇怪。好像不靠谱。它不会显示两次提交之间的任何更改,但有时会有更改。我不知道这是怎么发生的,但有其他人遇到过这些问题吗?

更新:我后来意识到 Stash 并不奇怪,只是有点不直观。在进行 merge 时,它显示了基于两个不同父项的更改。并且有一个小的下 pull 菜单,可以让您更改父项以查看与其对应的更改。我认为在这里更新它会很好,这样人们就不会产生误导性的想法。

最佳答案

您看到的暂存文件是上次同步本地分支与远程分支之间所有更改的结果(我猜是 master,因为您没有提到它)。

Git pull 已“获取”自您上次 pull 以来的更改,然后它会尝试将远程分支的本地副本 merge 到您的本地分支中。然后它在其中一个更改的文件中遇到了冲突。

所以它必须在 merge 的中间停下来问你如何解决对一个文件的冲突。

因此其他文件已准备好 merge ,已经暂存并且如果没有任何其他冲突将自动 merge 。

要完成自动 merge ,您需要 a) 解决冲突,然后 b) 点击提交以完成将其他人的更改 merge 到您的本地分支。 (某些 GUI 在您单击“我已完成解析”按钮后自动执行提交完成步骤)

您还会注意到在您的 GUI 的提交窗口中,有一个针对未决提交的预制 merge 消息?它会说类似“将 origin/x merge 到 x... 冲突:y”之类的内容。一旦所有更改的文件都可以添加到阶段,您就可以完成这个暂停的自动提交。

所以这对我来说听起来像是预期的行为,但你只是看到了 git 内部进程之一的“内部”。

这里不需要或不涉及存储。尽管一些 GUI 会自动存储,但 git 本身在 pull 过程中并不使用存储。

注意:当您进行 pull 时,您不应该在本地有任何更改的文件。 (即在执行任何分支操作之前提交所有干净的东西,是一个很好的最佳实践)让 GUI 清理您更改的文件是自动存储有用的时候,但是当存在冲突时它仍然有其复杂性。也就是说,您需要解决冲突,然后记得 pop 存储。如果您过于依赖自动化,当您必须完成您不知道的自动化过程时,它会变得困惑!所以我建议始终保持工作目录干净。

关于git - “git pull”在 merge 冲突期间将其他人的提交带到我的暂存区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29462988/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com