如何与上游分支进行通用合并

How to do generic merge with upstream branch

我在脚本中有这个:

git fetch origin
git pull   # merge with remote tracking branch
git merge 'origin/dev'

而不是上面的,我想将其简化为:

git fetch origin
git merge @upstream      # whatever the lingo is to refer to the upstream branch?
git merge 'origin/dev'

引用上游(也称为远程跟踪?)分支的通用方式是什么?

在您的情况下,您需要文字序列:

git fetch origin
git merge @{upstream}
git merge origin/dev

(我去掉了单引号,因为它们在这里并没有真正实现任何东西)。


@{upstream} 的描述出现在 the gitrevisions documentation 中,相当密集1,随着时间的推移值得多次重读。它实际上是一个 后缀 你可以应用于任何分支名称:

master@{upstream}
develop@{upstream}

等等。当应用于HEAD——当前分支名称——在HEAD@{upstream}中,它指的是当前分支的上游,正如你所期望的那样。2 添加连同通常的 "empty string means HEAD where appropriate" 规则——例如,master..master..HEAD 的缩写——而 @{upstream}HEAD@{upstream}.

的缩写

请注意,如果没有为分支设置上游,<em>name</em>@{upstream} 将失败(并显示错误消息)。您还可以对 gitrevisions 规则可接受的任何事物使用 git rev-parse,将其转换为更基本的 Git 表达式。这有时在复杂的脚本中很有用,因为它允许您找到一个哈希 ID,即使 name 在您继续对存储库进行操作时发生变化,您也可以保留它。


1"Dense" 是 "packed with information" 的意思,而不是 "stupid" 的意思;但也 "dense" 在难以理解的意义上。

2"Might" 可能比 "should" 更好,因为有时 Git 会做一些令人惊讶的事情,除非你知道所有种类Git.

中有关实现技巧的详细信息