我来自我的分支:
git checkout mybranchSample
git fetch
git pull origin master
然后,Git给了我以下信息:
请输入提交消息以解释为何需要此合并,
特别是如果它将更新的上游合并到主题分支
输入提交消息后,它会将master
合并到我的文件中。即使我没有处理master
中的某些文件,但当我输入git status
时,它会以绿色显示文件列表。
这个问题不发生在我的同事身上,但仅限于我。 这背后的原因是什么?
答案 0 :(得分:36)
git pull
基本上是两个操作:git fetch
后跟git merge
(除非您使用git pull --rebase
,在这种情况下您可以猜测会发生什么)。
您之所以看到这一点,是因为Git无法像大多数时间那样进行快进合并。这样做的原因通常是因为您已git commit
本地访问了您尝试提取的分支机构,现在您需要将远程更改与本地更改合并。
还值得注意的是,Git为您预先填充了合并消息,因此您并不需要输入任何内容。只需保存并退出,合并即可完成。 (当然,除非存在合并冲突)。
答案 1 :(得分:25)
Linus Torvalds解释得最好:
传播关于即将到来的' git'用户界面改变,因为我 主要是责备。
这个改变有希望让人们写合并消息来解释 他们的合并,甚至可能决定根本不合并 必要的。
我过去几周一直在使用那个git功能,而且它 导致我从子维护者的合并中有各种笔记 他们(好吧,至少如果子主机给了我任何东西)。所以我试着这么做 以身作则。
但如果你不想解释你的合并,这可能会很烦人。 当然,如果你不解释你的合并,你很烦人,所以它 最后都变得平淡无奇。 " Karmic balance",可以这么说。
答案 2 :(得分:3)
如果您尝试将master
合并到mybranchSample
分支,那么这是完全正常的。
Git将master
合并到mybranchSample
(当您从git pull origin master
分支mybranchSample
时)和commits
合并更改(除非有任何冲突) )并为您提供预先填充的消息。你可以保存并退出。
但是如果您只是尝试从远程master
分支获取最新代码以与本地master
分支合并,那么您应该结帐到{{1然后从master
拉出来。
来自你的陈述
它将主文件合并到我的文件中。即使我没有处理来自master的一些文件,当我输入git status时它会以绿色显示文件列表。
我认为你正在尝试做第二个。
所以,试试:
master
答案 3 :(得分:3)
我认为你的分支有问题......我可以想象你面临的两种可能情况:
1)
你有一个远程分支,A a;
A::B b = a.begin();
...
,你想要工作 - 你现在与主分支无关(也就是说,你不想将你的分支合并为主分支,反之亦然)。你在问题中说了
当我在获取之后从我的分支取拉...
但你做的是mybranchSample
,它来自主。相反,您应该能够使用git版本> = 1.6.6来使用
git pull origin master
2)您尝试使用git fetch
git checkout mybranchSample
,但想从那里获得主分支的最新代码。然后,正如Anand S所说,合并可能是必要的。
答案 4 :(得分:2)
这只发生在你身上的原因并不是你的配置不同,而是你所合并的分支是不同的。
你没有改变的差异中的文件的原因是在合并之后,新的提交必须是父提交:你最后提交的提交和master上的最新提交。新提交包含所有更改/文件。因此,如果您从新区分到上次提交,您将看到所有已更改/添加的文件已在主服务器上更改/添加,而您的分支与您的分支不同步主分支。
答案 5 :(得分:1)
只是尝试给大家一个简单的答案,如果我不正确,请纠正我:
在分支上提交git pull
后,似乎会发生这种情况。您的本地更改在遥控器上不存在,因此它会提交以使所有内容同步。