Gitプッシュは「非早送り」を拒否しました


91

gitチーム環境でコードを管理するために現在それを使用しているのは、かなり新しいです。リベースの問題がいくつかあり、を使用して修正しました

git checkout --ours filename.txt
git add filename.txt
git rebase --continue

変更をプッシュしたいので、次のコマンドを実行します

$ git push origin feature/my_feature_branch

次のエラーが発生します。

To ssh://git@coderepo.com:7999/repo/myproject.git
 ! [rejected]        feature/my_feature_branch -> feature/my_feature_branch (non-fast-forward)
error: failed to push some refs to 'ssh://git@coderepo.com:7999/repo/myproject.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.

エラーを取り除くにはどうすればよいですか?

PS:私は--force可能な限りオプションを使用することを避けています。


回答:


79

誰かがあなたの最後git fetchとの間で新しいコミットをプッシュしたようgit pushです。この場合、手順を繰り返して、my_feature_branchもう一度リベースする必要があります。

git fetch
git rebase feature/my_feature_branch
git push origin feature/my_feature_branch

その後、でgit fetch状況を調べることをお勧めしgitk --allます。


1
デフォルトでマージするはずのgitpull origin master:masterを有効にするために何をすべきか。これはマージの競合かどうか。これが唯一の質問です。
mathtick

25

おそらく、リベースまたは誰かが新しい変更をプッシュする前に(リベースしてプッシュしようとしている間に)リモート変更をフェッチしなかったでしょう。次の手順を試してください。

#fetching remote 'feature/my_feature_branch' branch to the 'tmp' local branch 
git fetch origin feature/my_feature_branch:tmp

#rebasing on local 'tmp' branch
git rebase tmp

#pushing local changes to the remote
git push origin HEAD:feature/my_feature_branch

#removing temporary created 'tmp' branch
git branch -D tmp

これは私の問題を解決します:コードをコミットしたときにリベースを行いました(遅すぎて、すでに変更がありました。コミットする前に行う必要があります)。それから、衝突がなくても、私は押すことができませんでした。上記の魔法を適用した後、それは機能しました。ありがとう。
Jing Li

19

私はこの問題を抱えていました!私は試しました:git fetch + git merge、しかし解決しませんでした!私が試した:git pull、そしてまた解決しない

それから私はこれを試し、私の問題を解決しました(エンジニアの答えに似ています):

git fetch origin master:tmp
git rebase tmp
git push origin HEAD:master
git branch -D tmp

8
これは私を台無しにしました、私はマスターに直接ものをプッシュし、一日中デプロイをプッシュしました...そして誰もが腹を立てています....素晴らしいヒント!
マイクQ

6
誰かに危険な道具を与える前に、あなたがしていることを要約して説明したいと思うでしょう。
mirv-Matt 2017年

10

同様の問題が発生し、次の方法で解決しました。 git pull origin


1
リモートブランチをプルしているときに問題のエラーを受け取ったときに助けてくれました。
GChuf

7

パーティーに遅れましたが、githubヘルプページで役立つ手順を見つけたので、ここで共有したいと思いました。

場合によっては、Gitはコミットを失うことなくリモートリポジトリに変更を加えることができません。これが発生すると、プッシュは拒否されます。

別の人があなたと同じブランチにプッシュした場合、Gitはあなたの変更をプッシュできません:

$ git push origin master
To https://github.com/USERNAME/REPOSITORY.git
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'https://github.com/USERNAME/REPOSITORY.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again.  See the
'Note about fast-forwards' section of 'git push --help' for details.

これを修正するには、リモートブランチで行った変更をフェッチして、ローカルで行った変更とマージします。

$ git fetch origin
# Fetches updates made to an online repository
$ git merge origin YOUR_BRANCH_NAME
# Merges updates made online with your local work

または、を使用git pullして両方のコマンドを同時に実行することもできます。

$ git pull origin YOUR_BRANCH_NAME
# Grabs online updates and merges them with your local work

4

このコマンドを試してください

$ git push -f -u origin <name of branch>

すなわち $ git push -f -u origin master


他の人がうまくいかなかったとき、それは私の場合にはうまくいきました。時には、あなただけの-f -u gitのを指示する必要があります
GCR

1

共有ローカルリポジトリにロックを書き込む

私はこの問題を抱えていましたが、上記のアドバイスはどれも役に立ちませんでした。すべてを正しくフェッチすることができました。しかし、プッシュは常に失敗しました。これは、Windowsディレクトリにあるローカルリポジトリであり、VMWare共有フォルダドライバを介して複数のクライアントが動作していました。システムの1つがGitリポジトリを書き込み用にロックしているようです。関連するVMWareシステムを停止した後、ロックが発生し、すべてがすぐに修復されました。どのシステムがエラーの原因であるかを特定することはほとんど不可能だったので、成功するまでそれらを1つずつ停止する必要がありました。


1

さて、私はここでアドバイスを使用しました、そしてそれが私のローカルコードを直接マスターにマージしたのでそれは私を台無しにしました。....だから、一粒の塩でそれをすべて取りなさい。私の同僚は、次のことが問題の解決に役立ち、私の支店を再指定する必要があると述べました。

 git branch --set-upstream-to=origin/feature/my-current-branch feature/my-current-branch

0

Eclipseで以下を実行します。

GITリポジトリ>リモート>オリジン>右クリックしてフェッチと言います

GITリポジトリ>リモートトラッキング>ブランチを選択してマージと言います

プロジェクトに移動し、ファイルを右クリックして、「上流からフェッチ」と言います。


0
  1. コードを新しいブランチに移動します-gitbranch -b tmp_branchyouwantmergedin
  2. マージするブランチに変更します-gitcheckout mycoolbranch
  3. マージするブランチをリセットします--gitbranch reset --hard HEAD
  4. tmpブランチを目的のブランチにマージします-gitブランチはtmp_branchyouwantmergedinをマージします
  5. 原点にプッシュ

0

この問題を解決する別の解決策は次のとおりです

>git pull
>git commit -m "any meaning full message"
>git push

-1
  1. ローカルコミットを元に戻します。これにより、コミットが取り消され、作業コピーの変更が保持されます。
git reset --soft HEAD~1
  1. 最新の変更をプルする
git pull
  1. これで、最新のコードに加えて変更をコミットできます
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.