767

私はGitHubが初めてです。今日、コードを GitHub にプッシュしようとしたときに、いくつかの問題に遭遇しました。

Pushing to git@github.com:519ebayproject/519ebayproject.git
To git@github.com:519ebayproject/519ebayproject.git
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'git@github.com:519ebayproject/519ebayproject.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Merge the remote changes (e.g. 'git pull')
hint: before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

まだリポジトリに何もプッシュしていないのに、なぜ何かをプルする必要があるのですか?

4

30 に答える 30

779

これにより、リモート リポジトリがコミットを失う可能性があります。注意して使用してください。

リモート ブランチをローカル ブランチにマージしたくない場合 ( git diffとの違いを参照)、強制的にプッシュしたい場合は、push コマンドに -f を付けて使用します。

git push -f origin <branch>

リモートoriginリポジトリの名前はどこにありますか。

通常、コマンドは、上書きに使用されたローカル ref の先祖ではないリモート ref の更新を拒否します。このフラグはチェックを無効にします。これにより、リモート リポジトリがコミットを失う可能性があります。注意して使用してください。

于 2013-08-08T20:08:07.187 に答える
244

メッセージの通り、

リモートの変更をマージします (例: 'git pull')

git pullリモート リポジトリからローカル リポジトリに最新の変更をプルするために使用します。この場合、ローカル リポジトリに変更を加えているため、変更をプルするにはマージが必要になります。

例と画像を示して説明します。オリジン/ブランチからの最後のプルがコミット B であったと仮定しましょう。いくつかの作業を完了してコミットしました (コミット C)。同時に、他の誰かが作業を完了し、オリジン/ブランチにプッシュしました (コミット D)。これら 2 つのブランチ間でマージが必要になります。

local branch:                         --- Commit C 
                                    /
                                   /
                                  /
origin/branch: Commit A ------ Commit B ---- Commit D

プッシュしたいのはあなたなので、Git は強制的にマージを実行します。そのためには、最初にオリジン/ブランチから変更をプルする必要があります。

local branch:                         --- Commit C -- Commit E
                                    /               /           
                                   /               /             
                                  /               /               
origin/branch: Commit A ------ Commit B ---- Commit D 

マージが完了したら、変更をプッシュすることでオリジン/ブランチをコミット E に早送りできるようになります。

Git では、マージによって競合が発生する可能性があるため、自分でマージを処理する必要があります。

于 2012-04-24T13:01:32.363 に答える
201

プッシュする前にコードを更新しましたか?

git pull origin master何かを押す前に使用してください。

originリモコンの名前として使用していると思います。

何かをプッシュする前にローカル リポジトリを最新の状態にするために、プッシュする前にプルする必要があります (他の誰かが既にコードを更新している場合に備えてgithub.com)。これは、競合をローカルで解決するのに役立ちます。

于 2012-04-24T13:01:03.530 に答える
125

これは通常、他の誰かがすでに変更を行っているブランチを変更git commitしようとしたときに発生します。git pushgit pullingx

通常の流れは以下のようになります。

ステップ 1 :git stashそのブランチでのローカルのコミットされていない変更。

ステップ 2 :そのブランチでローカルにコミットされた変更へ (git pull origin branch_name -vこのマージにメッセージを送信し、競合があれば修正します。 )pull and merge

STEP 3 : edgit stash popの変更 (次に、必要に応じてポップされたファイルにコミットするか、既にコミットされた変更をプッシュ (STEP4) してから、後でファイルに新しいコミットを行うことができます。 )stash

STEP 4 :git push origin branch_name -vマージされた変更。

(分岐用)branch_nameに置き換えます。mastermaster

于 2014-06-03T18:09:49.183 に答える
61

最初の簡単な解決策:

  • このコマンドを試してくださいgit push -f origin master
  • このコマンドは、リモート リポジトリ (GitHub) を強制的に上書きします。

推奨される解決策 1 :

  • 次のコマンドを実行します。
git pull --allow-unrelated-histories  //this might give you error but nothing to worry, next cmd will fix it
git add *
git commit -m "commit message"
git push

これがうまくいかない場合は、フォローしてください

解決策 2 (非推奨) :

あなたとあなたのチームメイトのコミット履歴をすべて削除します。したがって、プロのプロジェクトではこれを行わないでください

  • .gitフォルダからディレクトリを削除します。

  • 次に、次のコマンドを実行します。

      git init
      git add .
      git commit -m "First Commit"
      git remote add origin [url]
      git push -u origin master
    

また

git push -f origin master 

うまくいかgit push -f origin masterない場合にのみ使用してください。-u

これにより、ファイルのプッシュ中に発生するほぼすべての種類のエラーが解決されます。

于 2018-08-29T04:48:49.510 に答える
35

Git はプッシュしようとしているブランチを認識できないため、このエラーが発生する場合があります。

エラーメッセージにも含まれている場合

error: failed to push some refs to 'git@github.com:jkubicek/my_proj.git'
hint: Updates were rejected because a pushed branch tip is behind its remote
hint: counterpart. If you did not intend to push that branch, you may want to
hint: specify branches to push or set the 'push.default' configuration
hint: variable to 'current' or 'upstream' to push only the current branch.

その場合は、Jim Kubicek のConfigure Git to Only Push Current Branchの便利なヒントに従って、デフォルト ブランチを current に設定することをお勧めします。

git config --global push.default current
于 2012-11-19T06:14:11.577 に答える
20

上記の回答に加えて、次のことがうまくいきました:-

シナリオ -

  1. my_branchをオリジンに正常にプッシュしました。
  2. さらにいくつかの変更を加えました。
  3. もう一度プッシュしようとすると(もちろん、追加、コミットを行った後)、上記のエラーが発生しました。

解決 -

 1. git checkout **my_branch**
 2. git add, commit your changes.
 3. git pull origin **my_branch** (not origin, master, or develop)
 4. git push origin **my_branch**

証拠

于 2017-01-20T09:17:33.967 に答える
19

私は同じ問題を抱えていました。

git push --force

ファイルをコミットした後にこれを行い、エラーが発生しました。すべてのファイルをコミットし、それらをプッシュしました。それから、次に github にプッシュしたときに、要求されたことを実行しましたが、問題ありませんでした。これがあなたにとってもうまくいくことを願っています:)

于 2018-02-11T14:57:34.323 に答える
14

これについては、私のチュートリアル、GitHub の使用方法: 初心者向けチュートリアルで言及しました。

GitHub で新しいリポジトリを作成すると、GitHub から readme ファイルを作成するように求められる場合があります。GitHub で直接 readme ファイルを作成する場合、「プッシュ」リクエストが成功する前に、まず「プル」リクエストを行う必要があります。これらのコマンドは、リモート リポジトリを「プル」し、それを現在のファイルとマージしてから、すべてのファイルを GitHub に「プッシュ」します。

git pull https://github.com/thomas07vt/MyFirstRepo.git master

git push https://github.com/thomas07vt/MyFirstRepo.git master
于 2014-01-25T06:02:36.740 に答える
6

現在のブランチをプッシュしようとしたときに、上記のエラー メッセージが表示されましたfoobar

git checkout foobar
git push origin foo

同じリモート ブランチを追跡する 2 つのローカル ブランチがあったことがわかりました。

foo -> origin/foo (some old branch)
foobar -> origin/foo (my current working branch)

以下を使用して現在のブランチをプッシュするとうまくいきました。

git push origin foobar:foo

...そしてクリーンアップするgit branch -d

于 2015-07-22T13:58:46.583 に答える
5

私はまったく同じ問題を経験し、私が思っていたのとは異なる(ローカル)ブランチにいて、リモートからのコミットで正しいローカルブランチが遅れていたことが判明しました。

私の解決策: 正しいブランチをチェックアウトし、他のローカル ブランチからコミットをチェリー ピックし、git pull および git push します。

于 2015-04-21T10:04:51.263 に答える
5

同様の問題があり、ブランチを最新の状態に保つワークフローに問題があることが判明しました。私は次のことをしていました:

私のローカル「マスター」で

git fetch upstream
git merge upstream/master --ff-only

その後、ローカルブランチに戻ります

git rebase master

これは、以前の git フローではうまく機能しましたが、github では機能しませんでした。これgit rebaseは、ここで同期の問題を引き起こした問題であり (完全に理解せずに受け入れなければならなかったことを認めます)、残念ながら、git push -fおそらく最も簡単なオプションになる立場に私を置きました. 良くない。

git merge私の新しいフローは、次のようにブランチを直接更新することです。

私の地元の支店で

git fetch upstream
git merge upstream/master

もちろん、ローカル ブランチでコースを変更するので、早送りはできません。

お察しのとおり、私は git の専門家ではありませんが、このワークフローによって、私が抱えていた特定の問題をおそらく回避できると確信しています。

于 2016-09-02T09:53:42.060 に答える
5

同じ問題が発生しましたが、私の場合、リモートで間違ったブランチを入力しました。したがって、それがこの問題の別の原因のようです...正しいブランチにプッシュしていることを再確認してください。

于 2013-04-10T01:33:42.323 に答える
4

I have resolve this issue at my GIT repository. No need to rebase or force commit in this case. Use below steps to resolve this -

local_barnch> git branch --set-upstream to=origin/<local_branch_name> 

local_barnch>git pull origin <local_branch_name>

local_barnch> git branch --set-upstream to=origin/master

local_barnch>git push origin <local_branch_name>

hope it will help.

于 2016-11-15T06:31:35.103 に答える
4

ブランチ名はリモート ブランチ名と同じですか?

そうでない場合は、リモート ブランチと同じ名前の新しいブランチをチェックアウトして、もう一度プッシュしてみてください。

プッシュするリモート ブランチが [ testing ] で、ローカル ブランチの名前が [ test ] であるとします。

テスト ブランチにいない場合は、最初にテストブランチに切り替えます。

git checkout test

次に、新しいブランチを開き、testingという名前を付けます。

git checkout -b testing

さあ、それをプッシュする時が来ました:

git push [remote repo] testing
于 2013-11-23T05:05:06.823 に答える
4

誰もあなたの git リポジトリに変更を加えておらず、最新バージョンで作業していると確信している場合は、心の中で解決策として意味がありません...git pull

次に、これはおそらく何が起こったのか、あなたが使用したgit commit --amend

ステージングされた変更を完全に新しいスナップショットとしてコミットするのではなく、以前のコミットと組み合わせることができます。スナップショットを変更せずに、以前のコミット メッセージを単純に編集するためにも使用できます。

ATLASSIAN チュートリアル: 履歴の書き換え

ただし、git commit --amend 既にコミットを GitHub にプッシュしている場合は、実行することはお勧めしません。これは、「修正は最新のコミットを変更するだけでなく、完全に置き換えることになるためです。Git にとっては、まったく新しいコミットのように見えるからです」。つまり、あなたの GitHub の他の開発者には、履歴は A->B->C のように見えますが、あなたには A->B->D のように見えますpush

これが、エラー メッセージが表示される理由です! [rejected] master -> master (non-fast-forward)。最新の変更を誰もプルしていないことがわかっている場合は、実行できますgit push --force。これにより、パブリック リポジトリの git 履歴が変更されます。それ以外の場合...実行できますが、これは実行git pullしなかったのと同じ結果になると思いますgit commit --amend。新しいコミットが作成されます(つまり、gitプル後のgit履歴:A-> B-> C-> D )

詳細:最新のコミットを変更する方法

于 2016-08-19T21:27:44.663 に答える
4

In my case, I had "mybranch" checked out, and had done git pull, so I couldn't figure out why the push wasn't working. Eventually, I realized that I was pushing the wrong branch. I was typing git push origin master instead of git push origin mybranch.

So if you've already done git pull and still getting this message, make sure you're pushing the correct branch.

于 2014-09-07T07:13:04.077 に答える
3

gitwebに使用する裸の Git リポジトリに最新の変更をプッシュしているときに、同様のエラーが発生しました。私の場合、ベア リポジトリに変更を加えていないので、ベア リポジトリを削除して再度クローンを作成しました。

git clone --bare <source repo path> <target bare repo path>
于 2012-07-19T21:18:31.157 に答える
2

この問題は通常、コミットとしてカウントされる readme.md ファイルの作成が原因で発生します。このファイルはシステム上でローカルに同期されておらず、先頭に不足しているため、git プル リクエストが表示されます。readme ファイルを回避してから、コミットを試みることができます。私の場合はうまくいきました。

于 2019-03-15T20:44:35.577 に答える
0

use git pull https://github.com/username/repository It's because the Github and remote repositories aren't in sync. If you pull the repo and then Push everything will be in sync and error will go away.

`

于 2018-01-28T10:05:09.220 に答える
0

この問題の別の原因 (あまり一般的ではないようです)...

プッシュを行ったとき、サーバーは約 12 時間遅れていました

サーバーで NTP を構成し、クロックを同期します。

この投稿で説明したエラーを引き起こした新しい git push を実行しました。

于 2017-03-16T15:30:19.197 に答える
0
于 2020-08-03T20:23:00.023 に答える