我正在与同一分支机构的某个人合作。
在我添加或提交或推送之前,我每次更改工作目录后都会拉动,有时我只会收到以下消息。什么时候这样做,为什么?
请输入提交消息以解释为何需要此合并, 特别是如果它将更新的上游合并到主题分支中。
将忽略以“#”开头的行,并且空消息将中止 提交。
答案 0 :(得分:2)
请使用git pull --rebase
。
答案 1 :(得分:2)
好吧,就像通常使用git一样,这种行为取决于一些事情,在这种情况下你会看到这条消息,因为你的同事代码和你的同事之间有一些冲突,它试图进行合并提交,而不是做快进合并。
让我们澄清前面的短语,为此我们必须从头开始:
当你拉,你真正在做的是两个操作合二为一:
git fetch
)git merge origin/master
)要“加入”代码,您有两种可能的操作:合并或转换
进行合并时,git会创建一个新的特殊提交。它包含两个父项,一个用于上一次本地提交,另一个用于合并分支的最后一个代码。这就是为什么在创建合并时,如果使用GUI客户端或git log --graph
,您会在历史记录行中看到分歧的原因
无论它有多特殊,它仍然是一个提交,这需要一个消息。这就是你要描述的情况。
但是,您可以执行另一项操作将远程数据带到本地计算机:rebase。在这种情况下,您将获得远程数据,然后您的本地提交(尚未位于远程位置的提交)将在您最后提交的提交之前以相同的顺序应用。在这种情况下,您实际上并没有创建合并提交,因此不需要任何消息,因为历史记录将保持线性。
嗯,这就是诀窍:如果操作可以在没有任何冲突的情况下完成,git pull实际上可以执行rebase。这被称为快速前进。
您可以配置git以使用您想要的任何默认值(rebase或merge)或在进行合并时提供参数:
git pull --ff
,拉取数据并尝试重新绑定。如果存在冲突,此操作将中止
git pull --no-ff
始终创建合并,即使没有冲突
Here's an SO answer on how to configure git to use fast-forward by default
但是考虑到即使你有默认的ff,如果存在冲突,拉动操作将回退到正常的合并。如果你想强制拉动你需要做什么
git pull --rebase
但请注意,这样做不会使冲突消失,无论如何你都需要修复它们;)
答案 2 :(得分:2)
简单回答:git pull
只是git fetch
和普通git merge
的组合。
作为任何合并,如果Git发现不可能进行快速转发,则需要传统的合并(一次提交两个父级),因此此过程会要求提交消息。
答案 3 :(得分:0)
Git很可能希望您为合并提供消息。当原点从您的副本更改时,Git将尝试合并它。它想提供一个提交消息,因为合并的行为本身就是一个提交。
答案 4 :(得分:0)
一个简单的规则是:您提交对本地存储库的更改后,如果自从您上次提取以来其他人将其提交推送到了原始位置,您将被迫拉(获取/合并),这将要求合并消息,然后再推送您自己的更改。