git 合并原点 - 总是默认为跟踪分支?



>假设我有一个脚本,它执行以下操作:

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 将字符串(如masterorigin/developMERGE_HEAD(解析为提交哈希 ID 时,它会遵循 gitrevisions 文档中描述的规则。 特别是,使用了六个步骤。 第一个检查.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,请参阅git remote文档,尤其是set-head子命令。 但请改用@{upstream}表示法。

最新更新