Git执行commit amend后拉取操作为何产生冲突?
Git冲突与推送失败的原因拆解
嗨,我来给你一步步捋清楚这个问题的核心原因:
git commit --amend改写了本地历史,导致和远程分支历史分叉
你第一次修改并推送后,远程的feature/XYZ-123分支已经记录了那个提交的哈希值。而commit --amend并不是在原提交上修改内容,而是直接生成一个全新的提交,替换掉了本地仓库里原来的那个旧提交。这时候本地分支的历史和远程分支的历史已经完全不一样了——远程还保留着你第一次推送的旧提交,本地却是新的amend提交,两者出现了分叉。推送失败是Git的安全机制在起作用
Git默认不允许你用本地的“改写后历史”直接覆盖远程的“原始历史”,因为如果有其他同事也在这个分支上工作,这种操作会让他们的本地仓库历史混乱。所以推送时会提示你先拉取远程的最新内容,尝试合并。拉取冲突是因为两个提交修改了同一行代码
当你执行拉取操作时,Git会把远程那个你已经amend掉的旧提交拉到本地,然后尝试将它和你本地新的amend提交进行合并。但这两个提交都修改了同一行代码,Git无法自动判断应该保留哪一个版本,因此就触发了冲突。
内容的提问来源于stack exchange,提问作者user447607
相关产品推荐
相关产品推荐

