1. ホーム
  2. git

[解決済み] Git はローカルブランチがリモートブランチの後ろにあると言いますが、そうではありません。

2023-06-01 21:30:31

質問

シナリオは?

  1. 新しいブランチを作成する

  2. それをハックする

  3. コミットする

  4. プッシュする

  5. さらにハックする

  6. もう一度コミットする

  7. 再度プッシュしてみる

Gitが応答します。

現在のブランチの先端がリモートのブランチより遅れているため、更新が拒否されました。 など。

このブランチをハックしているのは私一人で、他の誰も触っていません。 リモートブランチは実際には の後ろにあります。 の後ろにあります。 プルする必要はまったくないはずです。

(そして、もし私がプルした場合、Gitは2つのブランチ間のコンフリクトを報告し、ブランチを自分自身にマージするよう強制します)

なぜこのようなことが起こるのでしょうか? また、どのように診断し、修正すればよいのでしょうか?

はっきりさせるために、私はどこにも分岐していませんし 誰も はそれに取り組んでいません。

Remote: Commit A -------- Commit B  

Local:  Commit A -------- Commit B -------- Commit C  

CはBの直系であり、分岐はありません。 しかし、git は C を A のブランチだと考えています。

Remote: Commit A -------- Commit B  

                  ------- Commit C  
                /  
Local:  Commit A -------- Commit B  

そうではなく、Bをそのまま継続したものです。

どのように解決するのですか?

おそらく歴史の書き換えを行ったのでしょう?あなたのローカルブランチは、サーバー上のブランチから分岐しています。このコマンドを実行して、何が起こったかをよりよく理解してください。

gitk HEAD @{u}

このエラーがどこから来ているのかを理解することを強くお勧めします。修正するには、単に実行してください。

git push -f

-f は、これを「強制プッシュ」とし を上書きします。 を上書きしてしまいます。これはチームで作業しているときには非常に危険なことです。 しかし しかし、あなたは自分一人でやっていて、ローカルの状態が正しいことを確認しているので これは問題ないでしょう。そうでない場合、コミット履歴を失う危険性があります。