2012-06-28 202 views
1

所以我在一個叫'test_branch'的分支上。Github - Git推送錯誤

我做git add .git commit和一切工作正常。

但是當我做git push,它給我的錯誤:

! [rejected]  acceptance -> acceptance (non-fast-forward) 
error: failed to push some refs to '[email protected]: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讓我發現,一切都是跟上時代的,做後一推,給了我同樣的錯誤如上。

有人可以幫我這個嗎?

謝謝。

+0

你想推送給主人還是推送到遠程分支? –

+0

我試圖推送到遠程分支... origin/test_branch – Myxtic

回答

2

當你不帶任何參數鍵入git push,其行爲取決於push.default設置的值。的push.default默認值是matching,其中,根據git help config,執行以下操作:

matching - 推具有在兩端具有相同的名稱的所有分支。這是爲那些準備所有分支成可發佈形狀,然後用一個命令推出它們的人。推入多個用戶共享的存儲庫是不合適的,因爲如果其他用戶更新了分支,本地停止的分支將嘗試非快速向前推送。

換句話說,如果你的本地倉庫中有一個名爲acceptance分支機構和遠程倉庫有一個名爲acceptance分支,然後git push將努力使遠程acceptance分支符合您acceptance分支,即使你沒有acceptance簽出。

所以,我的猜測是,你在過去的某個時間檢查了acceptance,但有人在其他項目(或者你從不同的克隆庫的)推新提交到acceptance。這導致您的本地acceptance分支位於遠程acceptance分支後面。現在,無論何時輸入git push,Git都會嘗試將遠程acceptance分支備份到本地存儲庫中的版本。

要解決,我建議設置push.defaultsimple(或upstream如果simple是不是在你的Git版本 - 它只是在1.7.11添加)。

+0

'git config push.default upstream'像一個魅力一樣工作。非常感謝 !! – Myxtic

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 
+0

+1非常感謝您的信息。 – Myxtic