很难 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,以确保自您上次检查以来他们没有获得更多提交)。