web-dev-qa-db-ja.com

Egitは非早送りを拒否しました

Githubリポジトリにプッシュしているときにこのメッセージが表示されます。修正手順を教えてください。私は一度だけプッシュし、成功しました。しかし、プロジェクトを更新して2番目のコミットをプッシュしようとすると、「マスターは非早送りを拒否しました」と表示され、プッシュを許可しません。手順を説明してください。

84
Jay

これと同じ問題があり、修正することができました。 afk5minは正しかったのですが、問題は、リモートリポジトリで変更してからコードをプルしたブランチです。標準のgitプラクティス( http://git-scm.com/book/en/Git-Basics-Working-with-Remotes )に従って、これらの変更をリモートでマージする必要がありますコミットする前に、ローカルの変更にリポジトリを保存します。これは理にかなっています。これにより、他の変更を取得してコードにマージし、他の変更が適切に機能し続けられるようにします。

とにかく、手順に進みます。

  1. 「フェッチ」を設定して、最初にプルしたブランチをフェッチします。

  2. リモートブランチを取得します。

  3. そのリモートブランチをローカルブランチにマージします。

  4. ローカルリポジトリで(マージ)変更をコミットします。

  5. 変更をリモートリポジトリにプッシュします。

詳細に...

  1. Eclipseで、「Gitリポジトリ」ビューを開きます。

  2. ローカルリポジトリが表示され、リモートリポジトリがサブフォルダとして表示されることを確認してください。私のバージョンでは、リモートと呼ばれ、その中にリモートプロジェクトが表示されます。

  3. 左を指す緑色の矢印を探します。これは「フェッチ」矢印です。右クリックして、「フェッチの構成」を選択します。

  4. URIが表示され、リモートリポジトリを指していることを確認してください。

  5. ポップアップのrefマッピングセクションを確認します。私は空でした。これは、取得するリモート参照を示します。 「追加」をクリックします。

  6. リモートリポジトリから取得する必要があるブランチ名を入力します。私は「マスター」でした(ところで、ここのドロップダウンはすばらしいでしょう!!、今のところ、あなたはそれをタイプしなければなりません)。ポップアップを続行し、最終的に[完了]をクリックします。

  7. [保存して取得]をクリックします。これにより、そのリモート参照が取得されます。

  8. ローカルリポジトリの「Branches」フォルダを見てください。これで、リモートフォルダにそのリモートブランチが表示されます。繰り返しますが、「マスター」が表示されます。

  9. 「master」という名前の「Branches」の「Local」フォルダー内のローカルブランチを右クリックします。 「マージ」を選択し、「Origin/master」という名前のリモートブランチを選択します。

  10. マージを処理します。

  11. ローカルリポジトリへの変更をコミットします。

  12. 変更をリモートリポジトリにプッシュします。

  13. 美味しい飲み物を飲みに行き、お祝いしましょう。休みを取りましょう。

214
Robert Bender

私の場合、プッシュ中にForce Updateチェックボックスを選択しました。それは魅力のように働いた。

15
BSeitkazin

それまでの間(プロジェクトの更新中)、「マスター」ブランチに対して他のコミットが行われました。したがって、変更をプッシュできるようにするには、まずこれらの変更をプルする必要があります。

11
afk5min

Eclipse Luna + Eclipse Git 3.6.1に適用可能

私、

  1. クローンGitリポジトリ
  2. ソースコードにいくつかの変更を加えました
  3. gitステージングビューからの段階的な変更
  4. 最後に、コミットしてプッシュします!

そして、私はEGitでこの問題に直面しました、そして、ここにそれを修正する方法があります。

はい、変更をコミットする前に誰かが変更をコミットしました。そのため、変更は拒否されます。このエラーの後、変更は実際にローカルリポジトリにコミットされます。 - で指摘されているようにlinear historyを維持したいので、変更をPullだけにしたくはありませんでした。

だから、私は次の手順を実行しました

  1. gitリポジトリの観点から、関連するGitを右クリックします
    事業
  2. Fetch from Upstreamを選択-リモート更新(参照とオブジェクト)を取得しますが、更新はローカルで行われません。詳細は を参照してください。「git pull」と「git fetch」の違いは何ですか?
  3. Rebase...を選択-ポップアップを開き、Preserve merges during rebaseをクリックします。理由を確認してください
    gitの「rebase --preserve-merges」は正確に何をしますか(そしてその理由は?)
  4. Rebase buttonをクリックします
  5. conflict(s)がある場合は、手順6に進み、そうでない場合は手順11に進みます
  6. Rebase Resultポップアップが表示されます。OKをクリックするだけです
  7. file comparatorが開くので、left side fileを変更する必要があります。
  8. 変更を正しくマージしたら、Git Stagingビューに移動します
  9. stage the changes。つまりadd to index
  10. 同じビューで、Rebase-> Continueをクリックします。すべての競合が解決されるまで、7〜10を繰り返します。
  11. Historyビューから、コミット行を選択し、Push Commitを選択します
  12. Rebase Commits of local.......チェックボックスを選択して、[次へ]をクリックします。理由を参照- Git:アップストリームから開発ブランチにリベースする
  13. Finishをクリックします

注:複数のローカルリポジトリコミットがある場合、複数のマージを回避するために1つのコミットでそれらを押しつぶす必要があります。

6
Yogesh Manware

Configure 拒否されたメッセージを受け取ったときにコードをプッシュした後、configureをクリックし、この図に示すようにAdd specをクリックします

Source ref and Destination ref ドロップダウンしてref/heads/yourbranchnameをクリックし、もう一度[仕様を追加]をクリックします

enter image description here 強制更新を選択していることを確認してください

enter image description here 最後にコードを保存してリポジトリにプッシュします

3

Gitビューを開く:

1-プロジェクトを選択し、マージを選択2-リモートトラッキングを選択3- OKをクリック

Gitはリモートブランチをローカルリポジトリにマージします

4-次にプッシュ

3
dafali

このエラーは、リモートリポジトリに他のコミットがあり、ローカルブランチよりも先に進んだことを意味します。
git pullの後にgit Pushを実行してみます。競合する変更がない場合、git pullは私の変更をそのまま維持しながら、ローカルブランチに最新のコードを取得します。
次にgit Pushを使用すると、変更内容がmasterブランチにプッシュされます。

1
Pushkin

私はあなたがgitの最新のコミットをしなければならないことを発見しました。そのため、これらの手順を実行します。1)同じファイルで作業していないことを確認します。そうしないと、DITY_WORK_TREEエラーが発生します。 2)最新の変更をプルします。 3)更新をコミットします。

お役に立てれば。

0