很难 100% 确定,但这种情况经常发生,所以这可能是正确的答案。
您提到您只有一个分支,名为master
. 我相信你!但是你不只有一个存储库——或者更准确地说,你有你的克隆,然后还有一些其他的克隆,可能在你调用origin
的某个中央服务器(如 GitHub 或公司服务器)上的远程。您将提交发送到服务器,并从服务器获取提交。
您还提到使用git commit --amend
. 请参阅git commit --amend 究竟是如何工作的?(如Jubobs 的评论)了解详细信息,但简而言之,这不会更改提交,它只是将其推到一边以支持新的替换提交。不过,大概您已经推送了原始提交——所以现在它在另一个master
存储库的分支中。
所以你现在有0c81926
作为你的尖端master
,而他们(起源)有c79dc19
。然后,您进行了新的提交f6429eb
,以便您master
指出这一点。
然后,我打赌你跑了git pull
(很可能你没有配置或指示你git pull
这样做git rebase
)。紧随git fetch
其后的是git merge
。用你的git fetch
遥控器检查,origin
发现它 master
指向 commit c79dc19
。git merge
运行的git pull
将他们的分支与您的分支合并,产生 merge commit 706b1ef
。
最后,这意味着您确实有两个不同的分支:master 和 master。只是其中一个是你的师父,一个是别人的师父。
请注意,您可以摆脱提交c79dc19
和合并,例如,使用git rebase -i fe6263e
(就在混乱开始之前的点):删除不需要的额外提交,并让git rebase
剩余的历史变平并省略合并。(或者,使用Jeff Puckett II 的回答中的方法。)但是,一旦你这样做,你的历史就会与历史不同:origin
他们有一个你没有的提交(c79dc19
你试图摆脱的那个) . 因此,如果不强制推送,您将无法推送(可选地,“强制使用租约”,期望它们master
是c79dc19
,以确保自您上次检查以来他们没有获得更多提交)。