git:ローカルにはない作業がリモートに含まれているため、更新が拒否されました


112

私は、BitBucketでgitを使用する数人の開発者とチームで作業しています。私たちは皆、リリースまでdevプッシュするのではなく、ブランチに取り組んでいmasterます。

開発者の1人が誤って自分のコードを上書きしてしまった誤ったコードをコミットしました。今は正しいコードをリポジトリにプッシュしようとしています。このエラーを数日間読んでいますが、次のエラーが発生しているため、レポにプッシュできなくなりました。

 ! [rejected]        master -> dev (fetch first)
error: failed to push some refs to 'https://myusername@bitbucket.org/repo_user/repo_name.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

との手順に従いpullますが、マージの競合が発生します。マージ競合のメッセージを入力した後、私のローカルコードは、他の開発者が誤ってアップロードした誤ったコードです(から予想されるとおりpull)。そのため、不正なコードをコミット前にコピーしたバックアップに置き換え、もう一度プッシュしようとすると、同じエラーが発生します。

それは本当にイライラさせられます、私は本当に私のチームを助けて貢献したいのですが、このエラーのために私はできません。誰もがこの問題を解決する方法を知っていますか?何か助けていただければ幸いです。

これらは、誰かを助ける場合、コミットするために実行するコマンドです:

git pull remotename master:dev
git add --all
git commit -m "some message"
git pull remotename master:dev
git push remotename master:dev

この順序を守っていれば、マージの競合は発生しないと思いました。私は間違っていたと思います。再度、感謝します

更新:Googleとstackoverflowで数時間探し、さまざまな指示に従っていることを追加する必要がありますpushが、それでもdevブランチにアクセスできません。

回答:


42

git pull <remote> master:devremote/masterブランチをフェッチして、ブランチにマージしますlocal/dev

git pull <remote> devremote/devブランチをフェッチし、現在のブランチにマージします。

競合するコミットがオンremote/devになっているとおっしゃっていたと思いますが、これがおそらくフェッチおよびマージを意図したブランチです。

その場合、実際にはローカルブランチに競合をマージしていませんでした。これは、作業コピーに誤ったコードが表示されたと言ったので、奇妙なことです。で何が起こっているかを確認したい場合がありremote/masterます。


1
うわー...私はそれを知らなかった。しかし、今ではそれは非常に理にかなっています。masterブランチも正しくなかったため、あなたの答えは私の質問全体をクリアします。私はまだgitに少し慣れていません。この2つの違いを教えてくれてありがとう!
delos、2014年

6
私にとって最良の選択肢はでしたgit pull --rebase
derekmx271 2015

151

端末でこのコマンドを使用します

git push -f originマスター


49
強制プッシュ(-f)フラグの使用は非常に危険であり、通常のワークフローの一部であってはなりません
Spaideri

5
この回答でいくつかの警告を見逃しているので、反対票を投じました。
Melebius

2
おお!これにより、リポジトリ自体が強制的に書き換えられます。
Azarsa

3
githubでも同じエラーが発生し、このコマンドで修正しました。@ theeastcoastwestなぜこれが危険だと言っているのですか。あなたの理由は何
ですか

3
@simonはリモートにある作業を無視し、変更をリポジトリに強制するため、これは危険です。したがって、チームの作業を台無しにしたくない場合は、無理にプッシュしないでください。
ガステン

42

これは、リモートリポジトリにプッシュしようとしているが、まだプルされていないリモート上に新しいファイルを作成したときに発生しますReadme。その場合、エラーが言うように

gitは更新を拒否します

ローカル環境で更新されたリモートを取得していないため。だからリモートから最初にプルを取る

git pull

ローカルリポジトリを更新し、新しいReadmeファイルを追加します。次に、更新された変更をリモートにプッシュします

git push origin master

私はgit pull origin develop私の地元の開発ブランチに行っていましたが、今はそれを行うだけgit pullでうまくいきます。理由はわかりません。
Alex

デフォルトでは、ローカルブランチをリモートブランチと同期している場合ので、あなたがあなただけのブランチを指定する必要はありません、そのブランチにチェックアウトされているがgit pull、十分である
ヒマンシュ

11

これは通常、リポジトリにローカルにはないアイテムが含まれている場合に発生します。したがって、変更をプッシュするには、この場合、リモートの変更を統合してからプッシュする必要があります。

リモートからプルを作成する

git pull origin master

次に、そのリモートに変更をプッシュします

git push origin master


7

私はそれを修正しました、私が何をしたか正確にはわかりません。私は単純に押したり引いたりしてみました:

git pull <remote> dev の代わりに git pull <remote> master:dev

彼らが同じ問題を抱えている場合、これが誰かを助けることを願っています。



6

あなたはこれを試すことができます: git pull origin master --rebase


2
こんにちはエドゥアルド!これでうまくいきました。しかし、それが機能する理由を説明できますか?このコマンドは正確に何をしますか?
Akshaya Natarajan

4

実際、githubは私たちが思っているよりもはるかに単純であり、gitリポジトリにいくつかのファイルを明示的に挿入した後でもプッシュしようとすると必ず発生するため、問題を修正するために単に試してください。

:git pull

その後..

:git push

注:リポジトリをプルした後で誤ってvimエディターでスタックした場合は、心配しないでください。vimエディターを閉じてプッシュを試してください:)


4

以下の手順を実行しました。ついにそれはうまくいきます。

手順

1)git init

2)gitステータス(ステータスの確認用)

3)git add。(すべての変更ファイル(。)を追加)

4)git commit -m "<pass your comment>"

5)git remote add origin "<pass your project clone url>"

6)git pull --allow-unrelated-histories "<pass your project clone url>"マスター

7)git push -u "<pass your project clone url>"master


2

このエラーが発生したのは、サーバーに更新があったが、SourceTreeに利用可能な更新が表示されなかったためです(最後にチェックしたときにオフラインだった可能性があります)。ソースツリーで更新を行ったところ、プッシュするアイテムが1つではなく2つ表示されるようになりました。

だから必ず押してください 、このエラーが発生した場合は、更新またはプル、再試行してください。


1

git pull --rebase origin master

git push originマスター


git push -f originマスター

警告 git push -f origin master

  • 既存のリポジトリを強制的にプッシュし、以前のリポジトリも削除するため、以前のバージョンが必要ない場合は、これが役立つ場合があります


1

これが私がこの問題を解決した方法です:

  1. git pull origin master
  2. git push origin master

これは通常、リモートブランチが更新されていない場合に発生します。この後、「コミットメッセージを入力してください」などのエラーが発生した場合は、これを参照しください(私にとっては、xiaohu Wangの回答が機能しました:))


0

SSDT VSプロジェクトを最初に持っていました。持っていたプロジェクトをGithubにプッシュしたかったのです。私はそのプッシュが私のマスターブランチを開始する私のレポの最初のバージョンになりたかったです。Donalが提案したgit push -f origin masterは、これを実現するための(私が見た)最も簡単な方法でした。何も書き直す心配がなかったので、理にかなっているようでした。


0

私も同じ問題を抱えていました。最初にプルせずにリポジトリに.Readmeファイルを作成したことがありました。

.Readmeファイルを削除するか、プッシュする前にプルすることができます。


5年前の質問に対するこの回答が追加の価値を提供するかどうかはわかりません。さらに、OPの特定の問題に対する解決策も提供しません。あなたは新しい貢献しているので、質問に答える方法についてのガイドをご覧ください:stackoverflow.com/help/how-to-answer
Sotiris Koukios-Panopoulos


0

あなたは使うことができます

git pull --rebase <your_reponame> <your_branch>

これは、ローカルリポジトリにまだ登録されていない変更がある場合に役立ちます。特にREADME.md

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.