100%確実なことは難しいですが、これはよくあることなので、おそらくこれが正しい答えです。
という名前のブランチが 1 つしかないことに言及していますmaster。私はあなたを信じています!しかし、レポジトリは 1 つだけではありません。より正確には、クローンがあり、さらに別のクローンがあります。おそらく、originGitHub などの中央サーバーや企業サーバーで呼び出したリモート上にあります。サーバーにコミットを送信し、サーバーからコミットを取得します。
の使用についても言及しgit commit --amendました。git commit --amend は正確にどのように機能しますか? を参照してください。( Jubobs のコメントのように) 詳細については説明しますが、要するに、これはコミットを変更するのではなく、新しい置換コミットを優先して押しのけるだけです。ただし、おそらく元のコミットは既にプッシュされているため、別のリポジトリのmasterブランチにあることになります。
だからあなたは今0c81926あなたの先端として持っていましたがmaster、彼ら(起源)は持っていましたc79dc19. 次に、 new commit を作成f6429ebしたため、それをmaster指すようになりました。
次に、実行したに違いありませんgit pull(そして、ほとんどの場合、実行するように構成または指示git pullしていませんgit rebase)。これにgit fetch続いて実行されましたgit merge。git fetchがリモートで確認したところ、 が commitを指していることoriginがわかりました。実行されたは自分のブランチをあなたのブランチとマージし、 merge commit を生成しました。 masterc79dc19git mergegit pull706b1ef
結局、これが意味することは、masterと master という 2 つの異なるブランチがあったということです。そのうちの1人があなたのマスターであり、そのうちの1人が他の誰かのマスターであるというだけです。
たとえば、 (混乱が始まる直前のポイント)を使用して、コミットc79dc19 とマージを取り除くことができることに注意してください。不要な余分なコミットを削除し、残りの履歴を平坦化し、マージを省略します。(または、Jeff Puckett IIの回答の方法を使用してください。)ただし、これを行うと、履歴は上の履歴から分岐します。それらには、コミット(取り除こうとしているのと同じ)があります。 . そのため、プッシュを強制せずにプッシュすることはできません (オプションで、最後にチェックしてからさらにコミットを受けていないことを確認するために、「リースを強制」します) 。git rebase -i fe6263egit rebaseoriginc79dc19masterc79dc19