2012-09-29 23 views
72
ではありません

シナリオ:私はそれに
Gitはローカルブランチをリモートブランチの背後にあると言うが、それは

  • を新しいブランチ
  • ハックを作る


    1. プッシュそれを
    2. それをコミット
    3. もう一度ハックします
    4. コミットもう一度あなたの現在のブランチの先端が その遠隔の相手の背後にあるので

      アップデートが拒否されました:

    5. は再び

    Gitが応答プッシュしよう。

    私はこのブランチで唯一ハッキングしています。誰もそれに触れていません。リモートブランチは、実際にはローカルブランチの後ろにです。私は全く引っ張ってはいけません。

    (そして、私が引っ張っない場合、Gitは2間の競合を報告し、自分自身の中にブランチをマージするために私を強制的に)

    はなぜ、この(おそらく)が起こっているのですか?そして、それをどのように診断/修正できますか?

    明確にするために、私はどこにも分岐していないよ、と誰もはそれに取り組んでいる:

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

    Cには関与分岐、Bのストレート継続ではありません。しかし、gitはCがAの枝であると考えます:

    そうではありません。それはBの真っ直ぐ続きです。

  • +1

    'gitのリモート-V'と' Gitのショーリモートorigin'の出力を役に立った –

    答えて

    182

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

    gitk HEAD @{u} 
    

    このエラーの原因を理解することを強くお勧めします。それを修正するには、単に実行します。

    git push -f 
    

    -fは、この「強制プッシュ」を作るとサーバー上の枝を上書きします。それはあなたがチームで働いているときに非常に危険です。しかし、 あなた自身であり、あなたの地方の状態が正しいことを確かめてください。 これはうまくいくはずです。そうでない場合は、コミット履歴を失う危険があります。

    +12

    それはそれだった。ステップ2で、私は「最後のコミットを修正」してからプッシュし、さらにいくつかハッキングして、もう一度プッシュしようとしました。私はアマンドが働く方法を誤解しました。ありがとう! –

    +3

    これは本当に役に立つようですが、誰かが 'HEAD @ {u}'の構文を説明することができますか? – ChrisV

    +3

    'HEAD'と' @ {u} 'の両方がコミットを参照しています。 gitkには、どのブランチが表示されるかが伝えられます。 'HEAD'は現在チェックアウトされているブランチを表し、' @ {u} 'は現在チェックアウトされているブランチのアップストリームブランチを表す' HEAD @ {u} 'の略です。だから例えば。 'master'は通常' origin/master'です。 – Chronial

    4

    これは私が開発ブランチをプッシュしようとしていたときに起こりました(私はgitフローを使用しています)。誰かがマスターにプッシュアップデートをしていました。それを修正するために私はした:

    これらの変更を取得した。次に、

    git co develop 
    git pull 
    

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

    0

    診断するには、this answerに従ってください。

    しかし、あなたは、それを変更するだけですん知って、それを修正する:
    1 - バックアッププロジェクト(私はgitの、./srcフォルダのファイルのみをしました)
    2からgit pull
    3 -

    私はgit pull -s recursive -X oursを試しましたが、私が望んでいた方法ではうまくいきませんでしたが、それはオプションですが、最初にバックアップしてください!

    違い(git gui)が「none」であることを確認してください。これは私の場合ですが、マージするものは何もありませんが、githubは私がマージしなければならないと言っています。

    0

    解決方法はとてもシンプルで、私の仕事です。

    このお試しください:5月(仮定原点はあなたが持つ問題を抱えているリモートの)

    git pull --rebase <url> 
    

    その後、

    git push -u origin master 
    
    関連する問題