假设我有一个脚本,可以执行以下操作:
git fetch origin
git branch | while read b; do
git checkout $b
git merge origin
done
我的问题是 - git总是知道如何处理git merge origin
命令,假设所有分支都被远程跟踪?
... 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
的文件,该文件(推测)将不存在。请注意,当应用于文字字符串origin
时,步骤6检查您的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}
表示法。)