Git fetch/merge不起作用。

3
我对代码进行了一些更改。
  • git add -A
  • git commit -m ".."
  • git push origin master

! [rejected] master -> master (non-fast-forward) error: failed to push some refs to '.....' 为了防止您丢失历史记录,非快进式更新被拒绝。 在再次推送之前,请合并远程更改。 有关详细信息,请参见“git push --help”中的“快进式转发”部分。

  • git fetch origin master

正在统计对象:42已完成。 正在压缩对象:100%(26/26),已完成。 共26个(delta 17)已重复使用0个(delta 0)解包对象:100%(26/26),已完成。 来自...... *分支master-> FETCH_HEAD

  • git merge master

已经是最新的。

  • git merge origin/master

已经是最新的。

  • git merge origin/master master

已经是最新的。太好了!

  • git push origin master

! [rejected] master -> master (non-fast-forward) error: failed to push some refs to '....' 为了防止您丢失历史记录,非快进式更新被拒绝。 在再次推送之前,请合并远程更改。 有关详细信息,请参见“git push --help”中的“快进式转发”部分。

发生了什么?使用git pull可以解决问题,但我读到最好使用fetch/merge,请告诉我我错在哪里。

2个回答

4

git pull会产生与git fetchgit merge完全相同的结果。

git fetch根据调用方式执行略有不同。 通常只需调用git fetch即可,这将从源更新所有远程分支。 此后你自己的分支仍然是master,而远程分支是origin/master,因此如果要将origin/master合并到master中,则必须切换到master并使用git merge origin/master

git fetch origin master只会提取该分支并将其存储到临时分支FETCH_HEAD中,可以使用git merge FETCH_HEAD进行合并。

但你可能只想简单地执行git pull。;)

提示:使用git branch -av查看所有本地和远程分支。


谢谢,这个方法可行。假设我使用git fetch命令,它会更新3个分支:branch1、branch2和branch3。现在我只想将branch1和branch3合并(将每个分支合并到它的源分支,而不是一起合并)。我该怎么做? - Andrzej Gis
git checkout master; git merge origin/branch1; git merge origin/branch3 - 合并操作将该分支合并到当前所在分支上,因此您只需先合并第一个分支,然后再合并第二个。您也可以同时合并两个分支,使用git merge origin/branch1 origin/branch3即可。 - michas

1
你目前检出的分支是什么?git merge origin/master master不会针对 master: 你总是将其合并到当前分支。

我在主分支上。实际上,我只是尝试了所有组合:D。那么,如何正确地做呢? - Andrzej Gis

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