1

だから私は「test_branch」と呼ばれるブランチにいます。

私はそうしますgit add .git commitそしてすべてがうまくいきます。

しかし、私がそうするgit pushと、エラーが表示されます:

! [rejected]        acceptance -> acceptance (non-fast-forward)
error: failed to push some refs to 'git@github.com:company/sample.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 pull実行すると、すべてが最新であることがわかり、その後プッシュを実行すると、上記と同じエラーが表示されます。

誰かがこれで私を助けてくれますか?

ありがとう。

4

2 に答える 2

2

git push引数なしで入力すると、その動作はpush.default設定の値によって異なります。のデフォルト値はpush.defaultmatching、 に従ってgit help config、次のことを行います。

matching-- 両端で同じ名前を持つすべてのブランチをプッシュします。これは、すべてのブランチを公開可能な形に準備してから、コマンド 1 つで押し出す人向けです。複数のユーザーが共有するリポジトリへのプッシュには適していません。他のユーザーがブランチを更新すると、ローカルで停止したブランチが高速転送以外のプッシュを試行するためです。

つまり、ローカル リポジトリに という名前のブランチがacceptanceあり、リモート リポジトリに という名前のブランチがある場合acceptance、は、チェックアウトしていなくても、リモートブランチを自分のブランチに一致git pushさせようとします。acceptanceacceptanceacceptance

つまり、あなたacceptanceは過去のある時点でチェックアウトしたが、プロジェクトの他の誰か (またはリポジトリの別のクローンからのあなた) が新しいコミットを にプッシュしたと思いますacceptance。これにより、ローカルacceptanceブランチがリモート ブランチの背後にありましたacceptance。と入力するたびに、Git はリモートブランチをローカル リポジトリにあるバージョンgit pushにバックアップしようとします。acceptance

修正するには、に設定push.defaultすることをお勧めしますsimple(または、Git バージョンで利用できないupstream場合simpleは、1.7.11 でのみ追加されました)。

于 2012-06-28T15:51:18.650 に答える
1

早送り可能なコミットをプッシュできるようにするためにマージする必要のあるブランチがおそらくあります。調べるには、まず

$ git fetch

その後、

$ git log --graph --decorate --oneline --all

プッシュしようとしているブランチが同じ行になく、マージしようとしているリモートブランチの前にあることがわかります。

ちなみに、git pushそれ自体で、追跡されたすべてのブランチを常に元のブランチにプッシュします。また、元のブランチが最新ではないブランチがある場合があります。その場合は、警告を無視してください。次の方法で、この警告をわかりやすくすることができます。

$ git config advice.pushNonFastForward false

しかし、あなたの本当の問題は、おそらくtest_branchがでプッシュされないことだとわかりましたgit push。これを修正するには、次のように入力します。

$ git branch --set-upstream test_branch origin/test_branch
于 2012-06-28T15:39:46.460 に答える