![拒否]マスター->マスター(最初にフェッチ)


102

! [rejected] master -> master (fetch first)'Gitで「」を解決する方法を説明する良い方法はありますか?

このコマンドを使用する $ git push origin masterと、エラーメッセージが表示されます。

! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'git@github.com:zapnaa/abcappp.git'

回答:


133

答えはそこにあります、gitは最初にフェッチするようにあなたに言っています。

おそらく他の誰かがすでにマスターにプッシュしていて、あなたのコミットは遅れています。したがって、変更セットをフェッチしてマージする必要があります。そうすれば、もう一度プッシュできるようになります。

そうしない場合(またはさらに悪いことに、--forceオプションを使用して強制する場合)、コミット履歴を台無しにする可能性があります。

編集:ここの男が--forceオプションを使用することについて非常に悪いアドバイスをしたので、私は最後のポイントについてより詳細に説明します。

gitはDVCSであるため、理想的には、他の多くの開発者が同じリポジトリ(またはそのフォーク)を使用して、あなたと同じプロジェクトに取り組んでいます。チェンジセットで強制的に上書きすると、「履歴を書き直した」ため、リポジトリは他の人のリポジトリと一致しなくなります。あなたは他の人々を不幸にし、リポジトリは苦しむでしょう。おそらく世界の子猫も泣くでしょう。

TL; DR

  1. 解決したい場合は、最初にフェッチします(次にマージします)。
  2. ハッキングしたい場合は、この--forceオプションを使用してください。

しかし、あなたは前者を求めました。1)常に、自分でgitを使用する場合でも、それは良い習慣であるためです。


5
ローカルファイルの重要な変更をフェッチして削除することはできませんか?
レオナルドカストロ2017

2
フェッチ後も変更されません
dhein 2017

@dheinが書いたように、フェッチの後にマージが続く必要があります。つまり、ローカルツリーをリモートツリーに「整列」する必要があります(したがって、マージを使用します)。 DRも
linuxbandit 2017

88

試してください:

git fetch origin master
git merge origin master

このコードを書いた後、私は他のエラーを受け取りました:(早送りではありません)

私はこのコードを書きます:

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

そして私の問題を解決しました


わたしも。それで私の問題は解決しました。警告がいくつかあります。私はサブリポジトリを台無しにしましたが、これで解決しました:stackoverflow.com/questions/19584255/…–
M. Beausoleil

1
@AurelioAマージコマンドが正しくありませんgit merge master。である必要があります。
マイク

なぜgitbranch -D tmpを使用する必要があるのですか?
МилошВељковић

27

を使用する必要があります git pull。そのコマンドはagit fetchを実行し、次にを実行しgit mergeます。

git push origin master --forceコマンドを使用すると、将来問題が発生する可能性があります。


1
プロジェクトに参加しているのがあなただけで、最初のプッシュをしようとしてイライラしている場合にのみ--forceを使用する必要があるのは正しいですか?
chrips 2017年

20

プルは常に正しいアプローチですが、1つの例外は、GitなしのファイルシステムをGithubリポジトリに変換しようとしている場合です。そこで、最初のコミットを強制する必要があります。

git init
git add README.md
git add .
git commit -m "first commit"
git remote add origin https://github.com/userName/repoName.git
git push --force origin master

私のために働いて、私は再び新しいプロジェクト(同じレポ)を始めました、そして私はそれを取り替えたいと思いました。
ucotta 2017年

18

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

git push origin master --force

または力不足 -f

git push origin master -f


2
これは、gitpush制限をオーバーライドします。チームワークにはお勧めしません。git pushのドキュメントから:リベース中に他の誰かが元の履歴の上に構築した場合、リモートのブランチの先端が彼女のコミットで進む可能性があり、-forceで盲目的にプッシュすると 彼女の作業失われます。
ケーシー

10

エラーメッセージに記載されているように、「最初にフェッチ」する必要があります。これは私のために働いた。次のコマンドを使用します。

  1. git fetch origin master

次に、次の手順に従ってマージします。

  1. git pull origin master
  2. git add .
  3. git commit -m 'your commit message'
  4. git push origin master

4

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

git push origin master --force

または

 git push origin master -f

3

次のコマンドを使用できます。まず、-mirrorフラグを使用して、リポジトリの新しいコピーを複製します。

$ git clone --mirror git://example.com/some-big-repo.git

次に、それに応じてコードに従います。

コマンドラインを使用して既存のプロジェクトをGitHubに追加する

それが機能しない場合でも、次のようにコーディングするだけです。

$ git push origin master --force 

または

$ git push origin master -f

3

私も同じ問題を抱えていたので、以下の手順に従ってください。

$ git pull origin master --allow-unrelated-histories 

(ローカルブランチをリモートブランチと簡単にマージできるかどうかを確認するため)

$ git push -u origin master 

(ローカルgitリポジトリのコンテンツ全体をオンラインリポジトリにプッシュします)


2

他の誰か(同僚など)がorigin/masterローカルmasterブランチにないコミットをコミットし、ローカルブランチからサーバーにコミットをプッシュしようとしている可能性があります。99%の場合、作業内容をから消去したくないと仮定するとorigin、次の2つのオプションがあります。

2)変更をローカルブランチにマージしてから、マージされた結果をプッシュします。 git checkout master git pull # resolve conflicts here git push

(この場合、git pull基本的にはagit fetchとaだけであることに注意してくださいgit merge。)

1)ローカルブランチをリベースして、同僚が最初にコミットしたように見せてから、あなたがコミットしたようにします。これにより、コミット履歴が適切かつ直線的に保たれ、「マージコミット」が回避されます。ただし、同僚の変更と競合する場合は、最悪の場合、コミットごとに(1回だけではなく)それらの競合を解決する必要があります。基本的に、これは他のすべての人にとっては良いことですが、あなたにとってはより多くの努力が必要です。 git pull --rebase # resolve conflicts here git push

(これgit pull --rebaseは本質的にgit fetchとであることに注意してくださいgit rebase origin/master。)



1

エラーは、マージブランチが原因である可能性があります。
これに従ってください:

ステップ1 :(git pull origin masterメッセージが表示された場合は無視してください)
ステップ2:git add .
ステップ3:git commit -m 'your commit message'
ステップ4:git push origin master


1

まず、を使用する必要がありますgit pull。次に、コマンドdo agit fetchを実行し、次にgitmergeを実行します。

git push origin master --forceコマンドを使用すると、将来問題が発生する可能性があります。


1

私はこのような新しいブランチをチェックアウトすることでこれを克服しました:

# git checkout -b newbranch <SHA of master>

# git branch
* newbranch
  master

# git push -u <repo_url_alias> newbranch

マスターとニューブランチの2つのブランチが残り、後でマージすることができます。



0

私の場合に発生した理由は、GitHub repリンクを作成するときに、READMEファイルで初期化したためです。

Gitリモートの作成中は、READMEファイルで初期化しないでください。初期化しないとエラーが表示されます。

そうしないでください。間違いなく正常に動作します。代わりに、マスターブランチにプッシュした後、必要に応じてreadmeファイルで初期化します。


0

他の解決策のどれも私のために働いていなかったので、これは私のために働いた。力さえない!

https://docs.github.com/en/github/collaborating-with-issues-and-pull-requests/resolving-a-merge-conflict-using-the-command-line

GitBashを通過する必要がありました

cd REPOSITORY-NAME
git add .
git commit -m "Resolved merge conflict by incorporating both suggestions."

それから私のcmdに戻って、私はできました:git push heroku master私の場合はこれが問題でした。



0

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

![拒否]マスター->マスター(最初にフェッチ)エラー:一部の参照を「git@github.com:」にプッシュできませんでした

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

--forceコマンドを使用して問題を正常に解決しました。したがって、git push origin master--forceを使用する必要があります






-1

問題が解決しました

私が抱えていた問題

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

私も同じ問題を抱えていました。問題はcommits、他のリポジトリが正常に機能しなかったpushedため、次のコマンドを実行する必要があることです。

  1. git fetch origin master

    出力: From https://github.com/username/repo-name * branch master -> FETCH_HEAD

  2. git merge origin master

    出力: Merge made by the 'recursive' strategy. repo-name/ReadMe.md | 1 - 1 file changed, 1 deletion(-)

  3. git push

    出力: Enumerating objects: 8, done. Counting objects: 100% (8/8), done. Delta compression using up to 8 threads Compressing objects: 100% (6/6), done. Writing objects: 100% (6/6), 1.00 KiB | 1.00 MiB/s, done. Total 6 (delta 2), reused 0 (delta 0) remote: Resolving deltas: 100% (2/2), completed with 1 local object. To https://github.com/user_name/repo-name.git 0852d5vf..70v56d9 master -> master

どうもありがとうございます

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