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


88

githubリポジトリにプッシュしているときにこのメッセージが表示されます。それを修正するための段階的な手順を教えてもらえますか?一回だけ押して成功しました。しかし、プロジェクトを更新して2番目のコミットをプッシュしようとすると、「マスターが非早送りを拒否しました」と表示され、プッシュできません。手順を説明してください。


「このリポジトリをREADMEで初期化する」で新しいリポジトリを作成した後も、同じ問題が発生します。私はそれを削除し、このチェックボックスなしでもう一度作成しました。
Andrew

@andrewは正しい
Dany Wehbe

回答:


225

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

とにかく、ステップに進みます。

  1. 最初にプルしたブランチをフェッチするように「フェッチ」を構成します。

  2. リモートブランチをフェッチします。

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

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

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

詳細に...

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

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

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

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

  5. ポップアップのref mappingsセクションを見てください。鉱山は空でした。これは、フェッチしたいリモート参照を示します。「追加」をクリックします。

  6. リモートリポジトリからフェッチする必要があるブランチ名を入力します。鉱山は「マスター」でした(ところで、ここのドロップダウンは素晴らしいでしょう!!、今のところ、入力する必要があります)。ポップアップを続行し、最終的に[完了]をクリックします。

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

  8. ローカルリポジトリの「ブランチ」フォルダを確認します。これで、リモートフォルダにそのリモートブランチが表示されます。再び、私は「マスター」を参照してください。

  9. 「マスター」という名前の「ブランチ」の「ローカル」フォルダーにあるローカルブランチを右クリックします。「マージ」を選択してから、「origin / master」という名前のリモートブランチを選択します。

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

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

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

  13. おめでとうございます。残りの日は休みを取ってください。


7
これは答えとしてマークする必要があります。魅力のように働いた。この問題は、EclipseでプロジェクトのGitHubにリポジトリを作成するときにファイル(通常のREADMEファイル)を追加しなかった場合でも発生します。ステップバイステップの説明を簡単にフォローしてくれてありがとう。
rbaleksandar 14

私があなたの投稿を読むまで、この問題は整理に1年かかりました。私の場合、リモートはありませんでしたが、Eclipseは「origin」というデフォルトのリモートを作成しました。
Eugene van der Merwe 2014

やっと、ようやくEclipseとマージできるようになりました。ここで重要なのは、通常のチーム同期ビューではなく、Gitリポジトリビューを使用してマージを行うことです。チームの同期ビューでeGitが何もしないすべてのオプションを無効にできるとよいでしょう。
ダンカーター、2015年

1
これは機能しますが、不要なマージコミットが作成されます。ここでリベースを使用する必要があります。変更はローカルのみであるため、公開された履歴は変更されません(これを行うと、gitはとにかく非早送りのプッシュを要求します)。MYNの答えが好きです。
nyuszika7h 2015年

プロジェクトを右クリックし、Mergeマスターにして、プロジェクトを右クリックし、再びpush branch Master働きました
user1207289

17

私の場合Force Update、押している間にチェックボックスを選択しました。それは魅力のように働きました。


これも私にとってはうまくいきました。コミットを「修正」した後、OPの状態になりました。そして、フェッチにより「フェッチするものは何もない」
Twilite

11

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


3
この場合、gitはかなり愚かです。すべての変更をリモートにプッシュしました。そして私はこのプロジェクトの唯一の仕事です。なぜ私はもう一度プッシュする前にリモートを引く必要があるのですか???? 引っ張られた変更は、もともと私のローカルから来ました
Junchen Liu

7

Eclipse Luna + Eclipse Git 3.6.1に適用可能

私、

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

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

はい、変更をコミットする前に誰かが変更をコミットしました。したがって、変更は拒否されます。このエラーの後、変更は実際にはローカルリポジトリにコミットされます。したくなかったPulllinear history指摘したとおりに維持したかったので、変更しでした。「git 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. 変更のマージが正しく完了したら、goto 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つのコミットでそれらを押しつぶす必要があります。


マージの代わりにリベースを使用することに同意します。不要なマージコミットを作成しないため、より良い方法です。(トピック外:スタックオーバーフローはまったくばかげているし、もともと「+1」を書いたという事実だけに基づいてコメントを拒否しています。私のコメントは完全に建設的です。ありがとうございました。)
nyuszika7h

4

設定し 、あなたが拒否されたメッセージを取得するときにコードを押した後には、configureをクリックすると、この写真のように仕様を追加]をクリックします

ソース参照と宛先参照 ドロップダウンしてref / heads / yourbranchnameをクリックし、もう一度Add Specをクリックします

ここに画像の説明を入力してください 強制更新を選択してください

ここに画像の説明を入力してください 最後に、コードを保存してリポジトリにプッシュします


3

gitビューを開きます。

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

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

4-次に押す


1

このエラーは、リモートリポジトリに他のコミットがあり、ローカルブランチよりも進んでいることを意味します。
git pullを実行してから、git pushを実行してみます。競合する変更がない場合、git pullは私の変更をそのままにしながら、私のローカルブランチに最新のコードを取得します。
次に、git pushによって変更がマスターブランチにプッシュされます。


多くの人々はこの単純な解決策を見逃しているようです:D
ブラック

0

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

お役に立てれば。


-1
  1. Githubに移動して、新しいコードのリポジトリを作成します。
  2. アップストリームへのプッシュを行う場合は、Ecliseで新しいhttpsまたはsshのURLを使用してください。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.