64

あきらめる!プッシュしようとするたびに、私は愚かになります:

! [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 ブランチにいくつかの変更を加え、「upstream master」からプルします。すべてがマージされます:

$ 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'

どんな助けでも大歓迎です!説明が必要な場合は、質問してください。返信します。

4

8 に答える 8

27

プッシュを行うときは、アップストリーム マスターの refspec を指定してみてください。

git push upstream upstreammaster:master
于 2009-03-06T20:31:25.237 に答える
18

Jarret Hardie is correct. Or, first merge your changes back into master and then try the push. By default, git push pushes all branches that have names that match on the remote -- and no others. So those are your two choices -- either specify it explicitly like Jarret said or merge back to a common branch and then push.

There's been talk about this on the Git mail list and it's clear that this behavior is not about to change anytime soon -- many developers rely on this behavior in their workflows.

Edit/Clarification

Assuming your upstreammaster branch is ready to push then you could do this:

  1. Pull in any changes from the upstream.

    $ git pull upstream master

  2. Switch to my local master branch

    $ git checkout master

  3. Merge changes in from upstreammaster

    $ git merge upstreammaster

  4. Push my changes up

    $ git push upstream

Another thing that you may want to do before pushing is to rebase your changes against upstream/master so that your commits are all together. You can either do that as a separate step between #1 and #2 above (git rebase upstream/master) or you can do it as part of your pull (git pull --rebase upstream master)

于 2009-03-06T23:47:12.397 に答える
13

最初の使用

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

そして試してみてください

git push -u origin master
于 2014-02-18T13:03:59.970 に答える
12

最初に、プッシュしようとしているのと同じ refspec からのプルを試みます。

これが機能しない場合は、git pushを使用して強制的に実行できますがgit push -f <repo> <refspec>、注意が必要です。この方法では、リモート リポジトリで参照が削除される可能性があります。

于 2009-03-06T20:37:01.403 に答える
3

「上流」にあるリポジトリは裸のリポジトリですか? 同じエラーが発生しましたが、裸に変更すると発生しなくなりました。

于 2011-06-22T09:52:23.560 に答える