这是一个简单的问题,但 Git 的标签十分令人困惑,我找不到答案。
当我有本地更改并希望将最新的远程仓库合并到本地仓库时,我会先进行本地提交,然后使用 git pull 命令。
当出现合并冲突时,我可以选择使用 MERGE_HEAD 或 HEAD 来解决冲突。
哪一个是远程仓库,哪一个是本地仓库呢?
谢谢。
这是一个简单的问题,但 Git 的标签十分令人困惑,我找不到答案。
当我有本地更改并希望将最新的远程仓库合并到本地仓库时,我会先进行本地提交,然后使用 git pull 命令。
当出现合并冲突时,我可以选择使用 MERGE_HEAD 或 HEAD 来解决冲突。
哪一个是远程仓库,哪一个是本地仓库呢?
谢谢。
它们都是本地的(这很重要,尽管不太有帮助 :-) )。
HEAD
是你当前所在的分支,也就是你现在检出的那个分支。 对于 git merge
命令来说,它指的是你开始时检出的分支。
MERGE_HEAD
是另一个提交,也就是你告诉 Git 要合并哪个提交的哈希 ID。也就是说,git merge origin/master
把 origin/master
解析为一些本地提交哈希 ID,然后合并该提交,而 MERGE_HEAD
包含该提交的哈希 ID。
我认为另一个提交的更好术语应该是 "other" 或者 --theirs
,Git 有时会使用这些术语,但 Git 的其他部分确实使用术语 "remote" 来指代 --theirs
提交。
MERGE_HEAD位于左侧,Base 位于中间,而HEAD 位于右侧。
结果证明,MERGE_HEAD是您要合并的提交/分支,HEAD是您要合并到的提交/分支,而 Base 是您应该编辑以解决冲突的合并结果。
因此,您应该编辑中间窗格中的代码,即 Base ,保存并提交。
更新11/11/2021:此答案不准确...请参见下面的评论。
HEAD
既是当前提交,也是当前分支。MERGE_HEAD
是您在请求执行合并时命名的提交,例如,git merge bob
以合并分支bob
顶部的提交;而这两个提交都是源。还有第三个源,即Git为您计算的合并基础提交。Git将这三个源组合起来生成一个新的提交,该提交放在当前分支上。 - torekgit checkout alice
来选择该分支进行开始。Alice 将成为您当前的 分支,她最新的提交现在也是您当前的 提交。现在您可以询问 Git:说一下:HEAD 名称对应哪个分支? 答案是alice
,或者:告诉我:HEAD 名称对应哪个提交? 答案可能是a123456...
。一个提交的真实名称是其哈希 ID;HEAD
可以被翻译为 分支名称 或 提交哈希值 中的任意一个。 - torek--theirs
或MERGE_HEAD提交来自你正在复制以创建新提交的分支。所以现在甚至没有更直接的映射了! - torek