86

シナリオ:

  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のまっすぐな続きです。

4

4 に答える 4

198

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

gitk HEAD @{u}

このエラーがどこから来ているのかを理解することを強くお勧めします。これを修正するには、次のコマンドを実行します。

git push -f

-fこれを「強制プッシュ」にし、サーバー上のブランチを上書きします。あなたがチームで働いているとき、それは非常に危険です。しかし、あなたはあなた自身であり、あなたの地元の州が正しいことを確認しているので、これは問題ないはずです。そうでない場合は、コミット履歴を失うリスクがあります。

于 2012-09-29T09:03:31.993 に答える
6

解決策は非常にシンプルで、私にとってはうまくいきました。

これを試して :

git pull --rebase <url>

それから

git push -u origin master
于 2017-08-14T10:43:32.233 に答える
4

これは、開発ブランチをプッシュしようとしたときに発生しました(私はgitflowを使用しています)。誰かがマスターに更新をプッシュしました。それを修正するために私はしました:

git co master
git pull

それらの変更をフェッチしました。それで、

git co develop
git pull

それは何もしませんでした。エラーメッセージにもかかわらず、開発ブランチはすでにプッシュされていると思います。すべてが最新であり、エラーはありません。

于 2015-04-28T19:25:31.153 に答える
0

それを診断するには、この答えに従ってください。

しかし、それを修正するには、あなただけがそれを変更していることを知って、次のようにします:
1-プロジェクトをバックアップします(私はgit、./ srcフォルダーのファイルのみを実行しました)2-3-多く
git pull
「混乱した」ファイルのバックアップを復元します(マージインジケーター付き)

私は試しgit pull -s recursive -X oursましたが、思い通りに動作しませんでした。それはオプションかもしれませんが、最初にバックアップしてください!!!

(git guiでの)違い/変更がないことを確認してください。これは私の場合です。マージするものは何もありませんが、githubはマージする必要があると言い続けます...

于 2016-09-20T02:30:05.600 に答える