拒否されたマスター->マスター(非早送り)


216

プロジェクトをプッシュしようとしています(すべてのファイルが新しいリポジトリにあります)。手順に従いますが、プッシュするgit push -u origin masterと次のエラーが発生します。

! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'git@github.com:asantoya/projectnewbies.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.

このエラーが何度も発生し、何をすべきかわからない。


4
ローカルマスターがリモートで必要な最新の変更を確実に持っている場合は、git push --force
IgorGanapolsky

34
git push --force <remote_repository>私のために働いた。
ソーター2014年

@ソーター-私は一日中同じ問題を抱えてきました、これは私を助けました!! ありがとうございました。しかし、なぜ最初に問題が発生したのか、なぜ修正が機能したのかについての説明はありません。
パダワン2015

1
@ pmr、OPが「エラーメッセージを読む」のがまったく役に立たないかどうかを軽々しく尋ねます。明らかに、エラーメッセージは、私や、彼の投稿に賛成した他の66人にメッセージが届かなかったのと同じように、OPには意味がありませんでした。だらしない、より賢いということは、人々をまったく助けません。
パダワン2015

3
@Padawanまた、この「ぎこちない、より賢い人」がこの質問に対して受け入れられた回答を提供し、72人(おそらくあなたを含む)が役に立ったと気付くでしょう。私のコメントが傲慢であったとは申し訳ありませんが、専門家の立場でその質問をされた場合、それは私の最初の質問でした。停止して、エラーメッセージを注意深く読むために1分ほどかかることもあります。そのエラーを初めて見たとき、私のためにやった。
2015

回答:


160

エラーメッセージが言うように:git pullあなたがしようとする前にgit push。どうやらあなたのローカルブランチはあなたの追跡ブランチと同期していません。

プロジェクトルールとワークフローによっては、使用することもできますgit pull --rebase


1
この自動マージREADME.md自動マージが失敗したことが表示されます。競合を修正してから結果をコミットします。
Asantoya17 2012

1
@ Asantoya17リモートマスターで行われた変更は、変更と競合します。ファイルを確認し、それらを確認します。次に、解決の結果をコミットします。チュートリアルまたは本を入手するか、少なくともメッセージを読んでください。
2012

1
プルとはどういう意味ですか?ファイルをプッシュしたり、リポジトリのWebサイトからファイルをフェッチしてダウンロードしたりできますか?(ビットバケットなど)
David Dimalanta 2013年

4
@AndrewS git push --force origin master。これらの種類の問題に人生で2回以上遭遇した場合、プロジェクトのワークフローは壊れます。機能はブランチで開発し、早送りせずにマージする必要があります。機能に「失敗」した場合は、マージコミットを元に戻す必要があります(機能をマスターにマージする前に、まず統合ブランチでテストを行うことをお勧めします)。しかし、Eclipseについてはわかりません。
pmr 2015

1
そのエラーが報告した場合はどうしますgit pull origin trunk:masterか?
Andry

175

注意:これは決してgitの推奨される使用法ではありません。これにより、リモートでの変更が上書きされます。これを行うのは、ローカルの変更をリモートマスターにプッシュする必要があることが100%わかっている場合のみです。

これを試して: git push -f origin master


47
いいえ、これを試さないでください。From git help push:「これにより、リモートリポジトリのコミットが失われる可能性があります。慎重に使用してください。」
jcsahnwaldt Reinstate Monica 2013

7
絶対にこれを行わないでください
ルイス2013

14
これでうまくいきました。githubでの私の唯一のコミットが新しいリポジトリで作成されたものだったので、私はそれが大丈夫だと思った プロジェクトの開始後は使用しないことをお勧めします。
Matthew Moore

1
配信用に作成されたリポジトリを更新する場合に便利です(リモート側に新しい変更はありません)
HiB

GitHubと同期してコミットを作成し、そのコミットに別のファイルを追加したいので、これを使用しました。そこで、ローカルで元に戻し、上記のコマンドを実行してGitHubから消去し、ローカルで再度コミットして同期しました。いいね!ちなみに、私はそのブランチに対して他のコミットが行われていないことを知っていました。
zeMinimalist 2017年

18

このコマンドは私にとってうまくいきました

git push -f origin master

3
このコマンドを使用する前に注意してください。このコマンドを使用すると、過去のコミットがすべて失われます。
twenk11k

-fはフォースプッシュを意味します
maheshmnj

@maheshmnjはい!
testuser

15

このエラーが発生しました。

ローカルのgitリポジトリを作成した後にgithubリポジトリを作成したので、githubにプッシュする前にローカルへの変更を受け入れる必要がありました。この場合の唯一の変更は、githubリポジトリの作成時にオプションのステップとして作成されたreadmeファイルです。

git pull https://github.com/*username*/*repository*.git master

リポジトリのURLは、プロジェクトのgithubページのここから取得されます:

ここに画像の説明を入力してください

その後、再初期化しました(これは不要な場合があります)

git init
git add .
git commit -m "update"

次にプッシュ:

git push

3
この回答は、実際のケースシナリオを反映しています。
kta 2014

9

私はgithubで新しいリポジトリを作成しましたが、同じ問題がありましたが、プル中にも問題があったため、これは私にとってはうまくいきました。

しかし、これはすべてを台無しにする可能性があるため、すでに多くのコードを持っているリポジトリでは推奨されません

git push origin master --force

この回答はすでに提供されています:stackoverflow.com/a/16374574/1771479、および推奨されません。
agold

9

警告:

行く「のgit pull」でない常にので気をつけても、ソリューション。リポジトリの履歴を意図的に変更した場合、この問題(Qで言及されている問題)に直面する可能性があります。その場合、gitは履歴の変更をリモートリポジトリの新しい変更と混同しています。したがって、をgit push --force呼び出すgit pullと、履歴に加えたすべての変更が意図的に取り消されるため、を使用する必要があります。


8

それでも問題git pullが解決しない場合は、おそらく変更をプッシュし(A)、その後、git commit --amendさらに変更を加えるために使用しました(B)。したがって、gitは履歴を失う可能性があると考えています。Aからのすべての変更が含まれているにもかかわらず、Bは別のコミットとして解釈されます。

             B
            /
        ---X---A

後で誰もレポを変更しない場合は、変更Aできますgit push --force

ただし、A他人からの変更があった場合:

             B
            /
        ---X---A---C

その後、あなたからその人の変更をリベースしなければならないABC- > D)。

             B---D
            /
        ---X---A---C

または手動で問題を修正します。どうすればいいのかまだ考えていませんでした。


7

次のコマンドを使用します。

git pull --allow-unrelated-histories <nick name of repository> <branch name>

お気に入り:

git pull --allow-unrelated-histories origin master

このエラーは、プロジェクトに共通の祖先がない場合に発生します。


7
git push -f origin master

ブルートフォースを使用する;-) gitでリポジトリを作成する前に作成したローカルフォルダーを追加しようとしている可能性があります。


2
これを含むすべての答えは警告を与えるはずです。
D.ベンノーブル

1
私はこれを試してみましたが、GitHubで多くのコミットがかかりましたが、リポジトリの別のローカルクローンから復元する必要がありました。危険な。
Paflow

6

これは、マスターに変更を加えたため、プロジェクトが最初にプルするように要求したためです。とにかくそれをプッシュしたい場合は、次のように入力してブルートフォースを使用できます。

git push -f origin master

最初に変更をコミットすることを忘れないでください。

git add .
git commit -m "Your commit message"


4

あなたがする必要があります

git branch

出力が次のような場合:

* (no branch)
master

それから

git checkout master

チェックアウトすると、コミットされていないすべての変更が失われるため、保留中のコミットがないことを確認してください。


4

![拒否]マスター->マスター(非早送り)

パニックに陥らないでください。これは非常に簡単に修正できます。あなたがしなければならないすべてはプルを発行することであり、あなたのブランチは早送りされます:

$ git pull myrepo master

次に、プッシュを再試行すると、すべてが正常になります。

$ git push github master


4

これは、私が開発ブランチにいて、マスターブランチに最新のアップデートがない場合に発生しました。

そのため、開発ブランチからgit pushしようとすると、エラーが発生しました。

マスターブランチ、git pullに切り替えて修正し、ブランチに戻ってgit pushしました。

$ git fetch && git checkout master
$ git pull
$ git fetch && git checkout develop
$ git push

3

開発マシンでこの問題が発生しました。devブランチは罰金を押しましたが、master(ながら枝が私を与えたgit push上にあるときINGのdevブランチ):

! [rejected]        master -> master (non-fast-forward)

だから私は試しました:

git checkout master
git pull

それは私に与えました:

You asked me to pull without telling me which branch you
want to merge with, and 'branch.master.merge' in
your configuration file does not tell me, either.

私はマスターブランチが欠落していることを知り.git/config、追加しました:

[branch "master"]
    remote = origin
    merge = refs/heads/master

その後git pushdevブランチでもうまくいきました。


2

私のリモートはローカルと同期していなかったので、これは私にとってはうまくいきました

git pull --rebase

git pullもう一度実行すると、Already up to dateと表示されているはずです。これで、オリジンにプッシュする準備ができました。

あなたがすでに持っていると仮定して git remote add origin remote repository URL

行う

`git push origin master`  

スクリーンショットはそれをすべて言います ここに画像の説明を入力してください

あるいは、これを行うことができます

  1. git stash(コミットされていない作業を一時的に保存します)
  2. git pull(ローカルとリモートを同期させる)
  3. git stash pop(コミットされていない変更を取り戻す)
  4. git push

1

問題と同じでした。私はGit Totoiseを使用しています。ちょうど右クリック-> TotoiseGit->クリーンアップ。これでGithubにプッシュできます。これでうまくいきました:D


1

これは、マスターに競合する変更を加えたためです。そして、あなたのリポジトリサーバーはこれらの言葉であなたにそれを伝えることができません、それで彼があなたのためにこれらの衝突に対処する問題ではないのでそれはこのエラーを与えます、そして彼はあなたにそれをそれだけで行うように頼みます。なので ?

1- git pull これにより、リポジトリのコードがサイトマスターのコードにマージされます。したがって、競合が表示されます。

2-これらの手動による矛盾を扱います。

3-

git push origin master

そしてプレスト、あなたの問題は解決されました。


0

この問題を解決できた唯一の方法は、ローカルとgitリポジトリを削除し、両端で同じリポジトリを再度作成することでした。今のところ問題なく動作します。


Dropboxにgit repoのバックアップを常に保存しています。そうすれば、ローカルリポジトリを削除する必要はありません。状況が発生したときに、Dropboxから関連するディレクトリをコピーして貼り付けるだけです。
IgorGanapolsky 2013



0

これは、Repoに名前を付ける際に発生した名前エラーが原因で発生する場合もあります。上記の回答のいずれかが機能しない場合、これは私にとってはうまくいきました:

そのリポジトリを削除して新しいリポジトリを作成し、次のコマンドを再試行します。

cd 'Local Directory Path'
git remote add origin *your_git_name.git*
git push -u origin master

追加元が既に存在する場合は、代わりにこれを使用してください:

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