Git - 追踪远程分支

7
我是一名Mercurial用户,对于远程分支的行为感到困惑。我有一个远程分支origin/dev,我想要将其复制到本地分支dev上。我希望实现以下目标:
  • 每当我执行git pull命令时,将origin/dev中的更改合并到dev
  • 每当我执行git push命令时,将dev中的更改合并到origin/dev
因此,我使用以下命令创建了一个跟踪分支:
git branch --track dev origin/dev

据我所知,这应该完全符合我的需求。
然而,我正在一个功能分支上工作,并发出了一个“git pull”的命令。当我稍后发出“git checkout dev”的命令时,我收到了令人困惑的消息:
“您的分支落后于'origin/master_dev' 2个提交,可以快进。”
因此,我的本地分支似乎没有被更新。如果我在拉取时不在该分支中,有没有一种方法可以将该分支更新到远程分支?如果没有,我是否正确认为,在dev分支上执行git merge(没有任何参数)就足以恢复情况?

1个回答

5
命令git pull会获取所有远程分支的更新(即更新所有远程跟踪分支),但只合并当前分支。当没有传递参数时,这是git pull的默认行为。
因为你在不同的分支上时执行了git pull,它只更新了dev的远程跟踪分支。现在,执行git merge就足以更新你的本地分支dev

3
顺便提一下,使用Git时应该选择"fetch and merge"而不是"pull"操作。具体可参考这篇文章:http://longair.net/blog/2009/04/16/git-fetch-and-merge/。 - Shahbaz
实际上,我只是尝试简单地合并,结果是“fatal: No commit specified and merge.defaultToUpstream not set.”即使分支被创建为跟踪。 - Andrea
1
好的。为了让它工作,您可以执行以下操作:git merge remote_name/branch_name。在您的情况下,是这样的:git merge origin/master_dev - Karthik Bose
15
即使分支被创建为跟踪分支,你仍需要将merge.defaultToUpstream设置为true。它告诉GIT在没有传递参数时与跟踪分支合并。因此,要么执行git config merge.defaultToUpstream truegit merge,要么执行git merge remote/branch - Karthik Bose

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