2014-02-25 33 views
0

在我的本地git倉庫,我主要有:Git的益智遊戲 - 工作圍繞'拒絕非快速forward`

* commit A 
| 
* commit B (master) (origin/master) 

我做了一些改變,因此現在是:

* commit A 
|\ 
| * commit B (develop) (origin/master) 
| 
* commit C (master) 

我想Git的回購(託管在beanstalkapp.com)進行更新,以反映這一點,看起來像:

* commit A 
|\ 
| * commit B (develop) (origin/develop) 
| 
* commit C (master) (origin/master) 

我怎樣才能做到這一點? git pushdenying non-fast-forward refs/head/master而失敗。我有什麼選擇來解決這個問題?

我的回購並不是非常有組織,我想重構它一勞永逸。

回答

2
git checkout master 
git merge origin/master strategy=ours 
git push origin master 

的「我們的」戰略忽視AB之間提交的所有變化,並提出了「假」合併(名義上的合併只)。 git push然後高興地做了舊的origin/master和新的master之間的快進。

結果:

* commit A 
|\ 
| * commit B (develop) 
| | 
* | commit C 
|/
* commit D, but identical to C (master) (origin/master) 
+0

我們可以將它應用於分支嗎?結帳和合並之間,你做了你的改變,然後它似乎? – pal4life

+0

@ pal4life是的。主人像其他人一樣是一個普通的分支。不確定你的第二個問題。 –

2

你被允許進行強制推送嗎?

否則是否允許刪除分支?在這種情況下,您可以刪除舊分支並推送新分支,這與強制推送基本相同。

+0

青苗不允許強制推,我不能刪除沒有被合併的一個分支。我認爲,我需要做的是將'origin/master'合併到新的'master'中,但是以保持新的'master'不被修改的方式(即,放棄提交A和B之間的所有更改 - a一種假合併)。 –

+0

似乎像豆莖真的想阻止你這樣的任務。 (畢竟你真的想改變已發佈的歷史......)如果你確定要這麼做,你可能會刪除整個存儲庫並用新內容重新創建它。 - 或者,只需使用'git revert'來「撤消」你的改變。這確實會留下一些多餘的提交,但您至少可以在不更改歷史記錄的情況下創建正確的分支內容。 – michas

+0

我發現我的解決方法。看看我的答案。 –