質問
あきらめます! 私がプッシュしようとするたびに、私は愚かになる:
! [rejected] master -> master (non-fast forward)
error: failed to push some refs to 'git@github.com:companyX/projectX.git'
私たちのチームには、新しいgitセットアップがあります。プライベートブランチを作成する代わりに、自分のコピーを作成するためにメインリポジトリ(github上)をフォークしました。
ある時点で私がやったことは:
$ git fetch upstream master:upstreammaster
これが私の現在の設定です::
$ git branch
master
* upstreammaster
$ git remote -v
origin git@github.com:userX/projectX.git
upstream git@github.com:companyX/projectX.git
userXは私のプライベートリポジトリです。
だから、upstreammasterブランチに変更を加え、<!> quot; upstream master <!> quot;からPULLを変更します。 すべてがマージされて詰め込まれます:
$ git pull upstream master
remote: Counting objects: 95, done.
remote: Compressing objects: 100% (60/60), done.
remote: Total 60 (delta 54), reused 0 (delta 0)
Unpacking objects: 100% (60/60), done.
From git@github.com:companyX/projectX
* branch master -> FETCH_HEAD
Merge made by recursive.
stuff | 165 ++++++++++++--------
stuff | 35 ++--
stuff | 107 ++++++++++---
stuff | 105 ++++++++++---
stuff | 24 ++--
stuff | 9 +-
stuff | 53 +++----
stuff | 44 +++---
stuff | 52 +++----
stuff | 32 +----
stuff | 4 +-
stuff | 138 ++++++++---------
stuff | 58 ++++----
stuff | 115 ++++++++------
stuff | 5 +-
stuff | 39 ++---
stuff | 28 ++--
17 files changed, 560 insertions(+), 453 deletions(-)
しかし、次にしようとすると:
$ git push upstream master
To git@github.com:companyX/projectX.git
! [rejected] master -> master (non-fast forward)
error: failed to push some refs to 'git@github.com:companyX/projectX.git'
ご協力いただければ幸いです!明確化が必要な場合は、お問い合わせください。返信します!
解決
プッシュを行うとき、アップストリームマスターのrefspecを指定してみてください:
git push upstream upstreammaster:master
他のヒント
ジャレット・ハーディは正しい。または、最初に変更をマスターにマージしてからプッシュを試みます。デフォルトでは、git push
はリモート上で一致する名前を持つすべてのブランチをプッシュし、他のブランチはプッシュしません。したがって、これらは2つの選択肢です。Jarretが言ったように明示的に指定するか、共通のブランチにマージしてプッシュします。
これについてはGitのメールリストで説明されていますが、この動作はすぐには変更されないことは明らかです。多くの開発者は、ワークフローでこの動作に依存しています。
編集/明確化
upstreammaster
ブランチがプッシュする準備ができていると仮定すると、これを行うことができます:
-
アップストリームからの変更をプルします。
$ git pullアップストリームマスター
-
ローカルマスターブランチに切り替える
$ git checkout master
-
rebase
$ git merge upstreammaster
-
変更をプッシュする
$ gitプッシュアップストリーム
プッシュする前に しておきたいもう1つのことは、git rebase upstream/master
アップストリーム/マスターに対して変更を加えて、コミットがすべて一緒になるようにすることです。上記の#1と#2の間の個別のステップ(git pull --rebase upstream master
)として行うことも、プルの一部として行うこともできます(<=>)
最初に、プッシュしようとしているのと同じrefspecからプルしようとします。
これが機能しない場合は、git push
を使用してgit push -f <repo> <refspec>
を強制できますが、注意してください。この方法では、リモートリポジトリで参照が削除される可能性があります。
最初の使用
git pull https://github.com/username/repository master
そして試して
git push -u origin master
<!> quot; upstream <!> quot;のリポジトリです。裸のリポジトリ?同じエラーが発生しましたが、むき出しに変更すると、それらは発生しなくなりました。
プッシュリクエストに[拒否]と表示されている場合は、まずgithubアカウントからプルしてからプッシュしてください。
例:
私の場合、エラーが発生していました-
! [rejected] master -> master (fetch first)
error: failed to push some refs to 'https://github.com/ashif8984/git-github.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.
****だから私がやったのは-****
$ git pull
$ git push
そして、コードは私のGithubアカウントに正常にプッシュされました。