2012-09-29 59 views
72

方案:的Git說,當地分支機構的背後是遠程分支,但它不是

  1. 我提出一個新的分支
  2. 黑客就可以了
  3. 提交它
  4. 推它
  5. 對其進行一些更多
  6. 再次提交
  7. 嘗試再次推

Git的迴應:

更新被拒絕,因爲你的當前分支的尖端後面 及其遠程副本。等等

我是唯一一個黑客在這個分支 - 沒有人觸及它。遠程分支實際上是後面的本地分支。我不應該一直拉。

(如果我不拉,Git的報告兩個之間的衝突,並迫使我分支合併到自己)

這是爲什麼(可能)發生了什麼?我該如何診斷/修復它?

要清楚,我沒有在任何地方分支,以及沒有其他人工作就可以了:

Remote: Commit A -------- Commit B 

Local: Commit A -------- Commit B -------- Commit C 

C是B的直延續,沒有分支受累。但git認爲C是A的一個分支:

Remote: Commit A -------- Commit B 

        ------- Commit C 
       / 
Local: Commit A -------- Commit B 

這不是;這是B的直接延續。

+1

GIT中遠程-v'和'GIT中顯示遠程origin'的'的輸出(假定原點是您有麻煩遠端)可以有幫助 –

回答

182

您可能做過一些歷史重寫?您的本地分支與服務器上的分支不同。運行此命令來獲取更好地瞭解發生了什麼:

gitk HEAD @{u} 

我會強烈建議你試着去了解那裏此錯誤的來源。爲了解決這個問題,只需運行:

git push -f 

-f使這是一個「被迫推」和覆蓋服務器上的分支。當你在團隊中工作時,這是非常危險的。但 因爲你是你自己的,並確保你的本地狀態是正確的 這應該沒問題。如果事實並非如此,你可能會失去承諾歷史。

+12

就是這樣。在第二步,我做了一個「修改最後提交」,然後推送,然後再攻擊一些,然後再次嘗試推送。我誤解了修正案的工作方式。謝謝! –

+3

這似乎很有用 - 但是有人可以解釋'HEAD @ {u}'語法嗎? – ChrisV

+3

'HEAD'和'@ {u}'均指提交。他們告訴gitk,要顯示哪些分支。 'HEAD'是指當前簽出的分支,'@ {u}'是HEAD @ {u}'的縮寫,表示當前簽出的分支的上游分支。因此,例如。 'master',通常是'origin/master'。 – Chronial

4

當我試圖推動開發分支(我使用git流)時,發生了這種情況。有人推動更新掌握。修復它我做了:

git co master 
git pull 

其中取得這些變化。然後,

git co develop 
git pull 

哪些沒有做任何事情。儘管有錯誤消息,我認爲開發分支已經推出了。一切都是最新的,沒有錯誤。

0

要診斷它,請按照this answer

但要修復它,知道你是唯一一個改變它,這樣做:
1 - 備份你的項目(我只做了文件上的git,./src文件夾)
2 - git pull
3 - 恢復備份在許多「雜亂」的文件(與合併指標)

我試過git pull -s recursive -X ours但沒有按我想要的方式工作,它可能是一個選項壽,但先備份!

確保差異/變化(在git gui上)沒有。這是我的情況,根本沒有任何合併,但github總是說我應該合併...

0

該解決方案非常簡單,爲我工作。

嘗試這種情況:

git pull --rebase <url> 

然後

git push -u origin master 
相關問題