Git:每次从远程主库拉取都会出现合并消息

14

每次我执行

git pull origin master

Git弹出编辑器并要求我在提交之前写下有关合并的评论。你有任何想法为什么会发生这种情况?另一位开发人员也在主分支上进行工作,但没有遇到这个问题。
据我所知,分支配置是正确的。除了在拉取时发生的这个烦人的合并提交外,我能够正常地拉取和推送更改。

你先执行了 git commit 吗? - bozdoz
你的pull操作总是在之前的基础上添加新的内容,还是在此期间进行了commit操作?也许你应该使用git pull --rebase命令来代替? - vonbrand
@bozdoz - 是的,我先做了一个本地的git commit。 @vonbrand - 我不是完全确定你在问关于pull的什么。 - Studio4Development
@Studio4Development 现在我遇到了你们的问题,请建议我解决这个问题的方法,谢谢 :) - Rong Nguyen
你找到任何解决方案了吗?我和我的同事们都遇到了这个问题,只有一个仓库。不确定哪个设置出了问题。每次我拉取代码时,在本地机器上没有任何更改,它就会提示合并,合并会包含之前提交的相同文件。 - sandeep koduri
3个回答

6

git pull 是先执行 git fetch,再执行 git merge。从 Git 1.7.10 开始,git merge 在合并时会弹出编辑器(请参见发行说明)。另一个开发者可能使用的是旧版本的 Git。


Git 1.7.10 是最近的版本吗?我已经使用 Git 已经有一年时间了。在这段时间里,我总是使用 git pull 来更新我的本地分支,但现在它不再像以前那样工作了。如果 git pull 发生了变化,那么从源服务器拉取更改的正确方法是什么? - Studio4Development
@Studio4Development:Git 1.7.10已于2012年4月6日发布(http://article.gmane.org/gmane.comp.version-control.git/194905),尽管您的操作系统分发可能需要一段时间才能获得更新版本。`git pull的行为仍然与以前相同,只是现在它会给您编辑生成提交消息的机会。如果您想要旧的行为,可以使用git pull --no-edit。 (但我建议完全避免使用git pull。这是一个可怕的命令,如果我发现任何同事使用git pull`,我会严厉谴责他们。) - Richard Hansen
你用什么命令从远程代码库拉取当前工作分支的更改? - Studio4Development
@Studio4Development:请查看我在https://dev59.com/rGUp5IYBdhLWcg3wXGy8#15316602的回答底部。 - Richard Hansen
我知道这很老,但是在2018年使用git版本2.15.2时出现了这个问题。令人困惑的是,本地没有任何更改,我只想从另一个开发者那里拉取更改(1个新提交),但它告诉我需要合并,而实际上没有需要合并的内容。更奇怪的是,第一次尝试没有拉取任何东西,只是进行了合并操作,第二次尝试也抱怨了,但却拉取了提交... - MikeyT

2
我不是git专家,但我曾遇到过这种情况,并成功地恢复了工作状态。以下是我的建议,所有这些都适用于git版本2.28.0(以及可能较早的版本)。我认为更熟练的git用户可以进一步简化这个答案。
当我做了某些事情搞乱了本地的master/main分支,导致它与应该跟踪的分支不同步时,就会发生这种情况。我还没有找出自己到底做错了什么,因为这种情况并不经常发生,所以我无法诊断自己的错误行为。(更新:我现在认为我已经看到了自己的工作流中会导致这种情况发生的行为之一。我去GitHub查看PR,并使用“查看命令行说明”信息中的复制链接来获取PR的副本。而被复制的两个命令中的第一个是git checkout -b ...。然而,有时我会不经意地在已经有一个同名分支的工作区执行此操作(通常是我已经尝试过PR的早期草稿),所以该命令失败,我仍然在我的master/main分支上,然后下一个命令被粘贴并将该分支合并到我的master/main分支中。然后我需要一段时间才能意识到出现了问题。)
我注意到自己陷入这种状态的两种方式:
- 当我执行git pull origin master时,编辑器窗口弹出(如OP中所述) - 当我推送到GitHub的PR显示形式为Merge branch 'master' of https://github.com/[myOrg]/[myRepo] into master的提交时
以下是我在发生这种情况时的解决方法:
  • 首先,在我的分支历史记录中找到带有此消息的最早合并提交:
    • 浏览日志:git log
    • 向后搜索最早带有消息Merge branch 'master' of https://github.com/[myOrg]/[myRepo] into master的提交
    • 查找该提交之前的SHA(即,我的master分支与应该跟踪的分支分开的点)
  • 将我的分支备份到该SHA:git checkout [SHA]
    • 这将使您的分支进入“分离的HEAD”状态
  • 将我的混乱的主分支重命名以将其放在一边:git branch -m master master-broken(可选地,您可以删除它,但这更安全,并且您随时可以稍后删除它)
  • 将当前分离的HEAD分支重命名为主分支:git checkout -b master
  • 将分支捕捉回应该在的位置:git pull [upstream source] master(在OP的情况下,我预计这将是git pull origin master

理解此修复的关键见解是要认识到master分支没有什么特别之处-它只是一个约定。因此,删除(或重命名)它并创建具有该名称的新分支没有问题。


0
我不知道为什么会出现这种情况,但我可以提供一个解决方案。正如你所注意到的,这只发生在你身上,而其他开发人员并没有遇到这个问题。因此,你的一些设置可能出了问题。我也曾经遇到过这个问题,导致历史记录看起来不太干净。一个彻底的解决方案是在本地删除主分支并重新获取它,就这么简单。

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