12

每次我做一个

git pull origin master

Git 会弹出一个编辑器,让我在提交之前写一个关于合并的评论。知道为什么会发生这种情况吗?另一位开发人员也在做 master 的工作,并且没有遇到这个问题。

据我所知,分支配置是正确的。除了在我拉动时发生的烦人的合并提交之外,我还能够像往常一样拉下更改并上推更改。

4

3 回答 3

6

git pullgit fetch紧随其后的是git merge。从 Git 1.7.10 开始,git merge合并时会弹出一个编辑器(请参阅发行说明)。其他开发人员可能正在使用旧版本的 Git。

于 2013-03-06T20:25:49.623 回答
2

我不是 git 专家,但我遇到了这种行为并设法恢复到工作状态,所以这里是我的提示,所有这些都使用 git 版本 2.28.0(以及可能的早期版本) . 我怀疑更专业的人git可以进一步简化这个答案。

当我做了一些事情来搞砸我的本地master/main分支导致它与它应该跟踪的不同步时,就会发生这种情况。我还没有弄清楚我做了什么来搞砸它,因为它发生的频率还不够高,我无法诊断出我行为中的错误。[更新:我想我现在已经在自己的工作流程中看到了导致这种情况的一种行为。我去 GitHub 查看 PR 并使用“查看命令行说明”信息中的复制链接来了解如何在我的工作区中获取 PR 的副本。复制的两个命令中的第一个是git checkout -b .... 但是,有时,我无意中在已经有一个具有该名称的分支的工作区中执行此操作(通常,我已经尝试过 PR 的早期草稿),因此命令失败,我仍在我的 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 分支重命名为 master:git checkout -b master
  • 将分支赶回它应该在的位置:( git pull [upstream source] master在 OP 的情况下,我希望这是git pull origin master

理解这个修复的一个关键见解是要意识到这个分支并没有什么特别之处master——它只是一个约定。所以删除它(或重命名它)并使用该名称创建一个新的没有问题。

于 2021-03-04T01:44:00.637 回答
0

我不知道为什么会发生这种情况,但我可以提供解决方案。正如您所注意到的,它只发生在您身上,而不会发生在其他开发人员身上。所以有些东西在你这边坏了。我也有这个问题,因此历史看起来并不干净。一个激进的解决方案是在本地删除 master 并重新获取它,就这么简单。

于 2021-06-09T09:09:13.180 回答