3

Github は私のプロジェクトのデフォルトのリポジトリです ("origin" を "github" に名前を変更しただけです)。「git push github master」が動作しているのに、「git push」で「non-fast-forward updates」エラーが発生するという問題が発生しています。「git pull」と「git pull github master」はどちらも最新の状態を示します。(a) Github にマージされていない変更がないことを確認し、(b) 非早送りエラーを修正するにはどうすればよいですか?

$ git status
# On branch master
nothing to commit (working directory clean)
$ git pull
Already up-to-date.
$ git pull github master
From github.com:MikeBlyth/mission_net
 * branch            master     -> FETCH_HEAD
Already up-to-date.
$ git push github master
Everything up-to-date
$ git push
To git@github.com:MikeBlyth/mission_net.git
 ! [rejected]        add_command -> add_command (non-fast-forward)
error: failed to push some refs to 'git@github.com:MikeBlyth/mission_net.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.

私のgit設定ファイルは

[core]
  repositoryformatversion = 0
  filemode = true
  bare = false
  logallrefupdates = true
[remote "github"]
  url = git@github.com:MikeBlyth/mission_net.git
  fetch = +refs/heads/*:refs/remotes/github/*
[branch "master"]
  remote = github
  merge = refs/heads/master
[remote "heroku"]
  url = git@heroku.com:joslink.git
  fetch = +refs/heads/*:refs/remotes/heroku/*
  merge = refs/heads/master
[remote "heroku"]
url = git@heroku.com:joslink.git
fetch = +refs/heads/*:refs/remotes/heroku/*
4

2 に答える 2

2

「git push」の構文は、明示的なバージョンと省略形のバージョンの両方をサポートしています。明示的なバージョンgit push github masterはあなたのために働きます。簡略版git pushにはありません。

省略版を使用する場合、どのリモートを使用するか、どのローカル ブランチをどのリモート ブランチにプッシュするかを git に指示しません。したがって、gitはあなたが何を意味するかを推測する必要があります。

これは、リモートのセットアップと push.default 構成で構成できます。

   push.default
       Defines the action git push should take if no refspec is given on
       the command line, no refspec is configured in the remote, and no
       refspec is implied by any of the options given on the command line.
       Possible values are:

       ·    nothing - do not push anything.

       ·    matching - push all matching branches. All branches having the
           same name in both ends are considered to be matching. This is
           the default.

       ·    upstream - push the current branch to its upstream branch.

       ·    tracking - deprecated synonym for upstream.

       ·    current - push the current branch to a branch of the same
           name.

を見てgit branch -vv、現在のブランチで追跡されているブランチを確認してください。次にgit config --get push.default、期待どおりに機能していることを確認します。

于 2013-01-12T10:12:13.320 に答える
2

githubこの説明は、リモート " "に使用されるデフォルトの refspec に関連している可能性があります。

+refs/heads/*:refs/remotes/github/*

単純なgit pushプッシュは次のとおりです。

  • githubマスター (ここでは " ") に関連付けられたリモートへ。masterが現在のブランチであるため ( によるとgit status)
  • 他のすべてのブランチ (master および add_commandブランチ)

add_commandgithubリモートと同期していないものです。

git checkout add_command 
git pull github

次に、git push動作します。

于 2013-01-12T09:22:52.170 に答える