web-dev-qa-db-ja.com

! [拒否]マスター->マスター(最初に取得)

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

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

! [rejected]        master -> master (fetch first)
error: failed to Push some refs to '[email protected]:zapnaa/abcappp.git'
62
Symfony

答えはそこにあります。gitは最初にフェッチするよう指示しています。

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

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

編集:私は最後の点についてさらに詳しく説明します。ここの人が--forceオプションを使用するという非常に悪いアドバイスをしたからです。

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

TL; DR

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

あなたは前者を求めましたが。 gitを自分で常に使用する場合でも、1)常に行ってください。

76
linuxbandit

試してください:

git fetch Origin master
git merge Origin master

このコードを書いた後、私は他のエラーを受け取りました:(non-fast-forward)

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

git fetch Origin master:tmp
git rebase tmp
git Push Origin HEAD:master
git branch -D tmp

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

40
Aurelio A

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

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

18

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

git Push Origin master --force

または力不足-f

git Push Origin master -f

10
user1865618

プルは常に正しいアプローチですが、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
10
J D

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

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

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

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

それが機能しない場合でも、簡単にコーディングできます:

$ git Push Origin master --force 

または

$ git Push Origin master -f
3

通常、ファイルを複製するときにREADMEソートされます。

2

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

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

(この場合、git pullは基本的にgit fetchgit mergeにすぎないことに注意してください。)

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

git pull --rebaseは本質的にgit fetchおよびgit rebase Origin/masterであることに注意してください。)

1
Chrispher

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

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

0
divyang hirpara

これは私のために働く

  1. git init

  2. git add --all

3.git commit -m "name"

4.git Push Origin master --force

0
Mizanur Rahman