git merge origin-始终默认为跟踪分支吗?

时间:2018-08-31 23:53:53

标签: git git-merge

说我有一个脚本,其功能类似于:

git fetch origin

git branch | while read b; do
   git checkout $b
   git merge origin
done

我的问题是-假设所有分支均由远程跟踪,git会一直知道使用git merge origin命令做什么吗?

1 个答案:

答案 0 :(得分:1)

  

... git总是知道如何使用git merge origin命令...

Git将始终执行某事。不过,可能不是您想要的!您可能想要:

git checkout $b
git merge $b@{upstream}

这不是 会发生什么。

当Git将masterorigin/developMERGE_HEAD之类的字符串解析为提交哈希ID时,它遵循the gitrevisions documentation中描述的规则。特别地,使用六个步骤。第一个检查.git目录中的文件。第三步检查标签名称,第四步检查分支名称。

请点击上面的链接,并检查指定修订版本部分下列出的六个步骤,并思考当Git在每个步骤尝试origin时会发生什么。例如,在第1步,Git将检查名为.git/origin的文件(大概不存在)。请注意,将步骤6应用于文字字符串origin时,将检查您的refs/remotes/origin/HEAD。现在运行:

$ git rev-parse refs/remotes/origin/HEAD

查看获得的哈希ID。这告诉您git merge origin的行为。

(要了解如何更改与refs/remotes/origin/HEAD关联的哈希ID,请参阅the git remote documentation,尤其是set-head子命令。但是请使用@{upstream}表示法。)