Git pull要求我编写合并消息

61

我从我的分支拉取:

git checkout mybranchSample
git fetch
git pull origin master

然后,Git 给了我以下的消息:

请为此合并输入提交信息,尤其是当将更新的上游合并到主题分支时。

enter image description here

在输入提交信息后,它将master合并到我的文件中。虽然我没有在一些文件上工作过,但当我键入git status时,它显示绿色的文件列表。

这个问题只发生在我身上,而不是我的同事们。有什么可能是原因吗?


27
请不要使用图片(特别是尺寸不当的图片)来展示文字内容。 - Denys Séguret
你是想将 master 合并到 mybranchSample 还是只是想要更新 master 中的代码? - Anand S
@Cactus请尝试完整阅读问题。如果该问题回答了问题,请告诉我>>为什么只有我在git配置文件中拥有相同内容的所有人中出现错误Host gitserver User git Hostname 91.12.12.12 Port 22 IdentityFile ~/.ssh/pratikj - Pratik Joshi
1
为什么不删除图片并包含 git status 的输出,而不是提供赏金?这样做更有可能得到一个包含相关细节的问题的答案。 - Andrew C
1
“显示绿色文件”并不是有用的信息。 - Andrew C
显示剩余5条评论
6个回答

66

git pull 基本上是两个操作同时进行:git fetch,然后是 git merge(除非你使用 git pull --rebase,那么你可以猜到会发生什么)。

你看到这个的原因是因为 Git 不能像大多数情况下那样执行 快进合并。通常的原因是因为你已经在本地对想要拉取的分支进行了 git commit,现在需要将远程更改与本地更改合并。

值得注意的是,Git 为你预先填充了合并消息,所以你不需要真正输入任何内容。只需保存并退出,合并就应该完成了。(当然,如果存在合并冲突,则需要手动解决)。


2
我的主要问题是“我需要担心吗?”如果我仍然获得窗口并键入一些消息,会发生任何错误吗? - Pratik Joshi
3
@PratikCJoshi 没有,你不用担心。 - Madara's Ghost
@MadaraUchiha 你有什么想法吗,为什么只有我在git配置文件中拥有相同内容的所有人中出现错误 Host gitserver User git Hostname 91.12.12.12 Port 22 IdentityFile ~/.ssh/pratikj - Pratik Joshi
@MadaraUchiha,你好,能否回答我的问题? - Pratik Joshi
1
这可能听起来有些傻,但我无法退出nano会话(exit命令只是关闭命令帮助提示),请问如何保存合并消息并继续? - Skyler
@Skyler:按下 Ctrl + O 然后按下 Ctrl + X。 - Krishna Chandran

32

Linus Torvalds最好地解释了这一点:

向大家宣传即将到来的“git” UI变化,因为我对此负有很大责任。

这个变化希望能让人们编写合并消息来解释他们的合并,甚至在不必要时决定不合并。

我最近几周一直在使用这个git功能,并且我的来自子维护者的合并中有各种注释(至少如果子维护者给了我),所以我正在尝试以身作则。

但如果您不喜欢解释您的合并,那么这可能会令人烦恼。当然,如果您不解释您的合并,那么您就是令人烦恼的,所以这最终会均衡。“业力平衡”,可以这么说。

来源:https://plus.google.com/+LinusTorvalds/posts/SrePhcj6XJe


4
哈哈,经典! 如果你不喜欢解释你的合并操作,这可能会令人恼火。当然,如果你不解释你的合并操作,你也会令人恼火,所以最终一切就平衡了。 - Kaushik NP
1
源链接已被取消。 - OmG

4
如果您正在尝试将master合并到mybranchSample分支,则这是完全正常的。Git会将master合并到mybranchSample(当您在mybranchSample分支中执行了git pull origin master)并为您提交合并更改(除非有冲突),然后提供预填充消息。您只需要保存并退出即可。
但是,如果您只是想获取最新代码并将其与本地master分支合并,则应切换到master并从master拉取。
根据您的陈述,我认为您正在尝试进行第二种操作。
因此,请尝试以下操作:
git checkout master
git pull origin master

3

试图给大家一个简单的答案,如有不当之处请纠正:

这似乎发生在你在分支上提交后执行git pull时。你本地的更改在远程上不存在,所以它会进行一次提交以使所有内容同步。


3
我认为你的问题与分支有关...我能想象到你可能面临的两种情况:
1)你有一个远程分支,名为mybranchSample,你想要在其上进行工作——目前与主分支无关(也就是说,你不想将你的分支合并到主分支或者反过来)。你在问题中提到:

当我从我的分支拉取之后,像这样...

但是你所做的是git pull origin master,它会从主分支拉取。相反,你应该能够使用git版本 >= 1.6.6来检出你的远程分支。
git fetch
git checkout mybranchSample

2) 如果你想在 mybranchSample 上工作,但是想要最新的主分支代码,那么合并可能是必要的,正如Anand S所说的那样。


3
这种情况只发生在你身上的原因不是你的配置不同,而是你要合并的分支不同。未更改的差异文件的原因是,在合并之后,新提交有两个父提交:你上次提交和主分支上最新的提交。新提交包含了所有的变更/文件。因此,如果你从新提交你上次提交进行差异比较,你将看到所有在你的分支与主分支不同步期间在主分支上更改/添加的文件都被标记为已更改/添加。

1
我知道这是6年前的事了,但我想问一下并希望得到最好的建议。您能否提供一些解决此问题的建议?我担心如果自己尝试解决它,会把一切都搞砸。我正在尝试运行git diff,但在比较提交时没有输出。 - Nunchuk

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