合并/拉动时Git错误

时间:2017-02-10 21:50:58

标签: git merge terminal

我在尝试合并或拉动分支时遇到错误。

错误(来自拉取请求的此示例)如下:

MacBook-Pro-2:boilerplate Gene$ git pull origin test_branch
From https://github.com/me/boilerplate
* branch            test_branch     -> FETCH_HEAD

Merge branch 'test_branch' of https://github.com/me/boilerplate into test_branch

# Please enter a commit message to explain why this merge is necessary,
# especially if it merges an updated upstream into a topic branch.
#
# Lines starting with '#' will be ignored, and an empty message aborts 
# the commit.
~                                                                               
~                                                                               
~                                                                               
~                                                                               
~                                                                               
~                                                                               
~                                                                               
~                                                                               
~                                                                               
~                                                                               
~                                                                               
~                                                                               
~                                                                               
~                                                                               
~                                                                               
~                                                                               
"~/Sites/boilerplate/.git/MERGE_MSG" 7L, 302C

肯定输入了提交消息。

git commit -am "saving my work"

这个错误并没有给我任何选择来解决它甚至ctrl + c out。我基本上必须关闭终端窗口并重新打开它。

事情是,一旦我重新打开终端,合并或拉取请求似乎总是成功,但是没有提交。我只是承诺我的改变和罚款。它主要是讨厌(对于更重要的合并有点神经紧张)。

有谁知道这可能是什么以及如何预防?

1 个答案:

答案 0 :(得分:1)

这不是错误消息。 git pull需要进行合并,并且要求您解释原因......对用户提出的问题有点不诚实,但这对您来说是Git。

git pull origin test_branch真的是git fetch origin加上git merge origin/test_branch。除非你告诉它,否则Git不会与远程存储库通信,所以它必须获得遥控器上更改内容的全新快照。它执行fetch以获取远程存储库状态的更新。它将此存储在origin/test_branch等远程跟踪分支中,test_branch分支在origin存储库中。

在获取之前,您的回购可能看起来像这样。

A - B - C - D [origin/test_branch]
             \
              E - F [test_branch]

这意味着您最后一次从origin获取,其test_branch位于D.然后您做了一些本地提交。

获取后,它可能看起来像这样。

A - B - C - D - G - H [origin/test_branch]
             \
              E - F [test_branch]

其他人推了一些更改,因此您的test_branch已与origin的{​​{1}}分支不同。这必须合并,因此test_branch执行git pull。这导致合并提交,并且像任何合并一样,它要求您解释它发生的原因。

git merge origin/test_branch

您可以告诉它类似于"与遥控器同步"。

这样就足够了,你会得到许多合并,而这些合并实际上只是簿记。

A - B - C - D - G - H [origin/test_branch]
             \       \
              E - F - I [test_branch]

I,O和Q都没有意义。每个人都这样做,存储库可能会变得很乱。我画得很整齐,但是Git并不总是如此。

有更好的方法。 A - B - C - D - G - H - J - K - L - M [origin/test_branch] \ \ \ \ E - F - I - N - O - P - Q [test_branch] 。这是一个fetch + rebase,而不是fetch + merge。所以git pull --rebase之后就有了这个。

fetch

而不是A - B - C - D - G - H [origin/test_branch] \ E - F [test_branch] git merge origin/test_branchgit rebase origin/test_branch。它将E和F重写为好像它们一直位于H之上,为它们提供新的提交ID。

A - B - C - D - G - H [origin/test_branch]
             \       \
              E - F   E1 - F1 [test_branch]

E和F最终将被垃圾收集,但他们会暂停一段时间,所以如果出现任何可怕的错误,你可以改变这个过程。

没有簿记合并来混淆事物。历史很好而且线性。好像你一直在研究最新的代码一样。

rebase的其他用法不同,这始终是安全的,因为它只影响您未与其他人共享的提交。您可以放心地设置它,以便git pull中的~/.gitconfig始终会变基。

[pull]
        rebase = true

现在git pull origin test_branch将使用rebase而非合并,并且您将拥有更清晰的历史记录,并且记账更少。