说我有一个脚本,其功能类似于:
git fetch origin
git branch | while read b; do
git checkout $b
git merge origin
done
我的问题是-假设所有分支均由远程跟踪,git会一直知道使用git merge origin
命令做什么吗?
答案 0 :(得分:1)
... git总是知道如何使用
git merge origin
命令...
Git将始终执行某事。不过,可能不是您想要的!您可能想要:
git checkout $b
git merge $b@{upstream}
这不是 会发生什么。
当Git将master
或origin/develop
或MERGE_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}
表示法。)