2012-10-25 23 views
0

幾個提交已被推送到原始分支。這些提交包含導致問題的代碼。爲了解決這個問題,我在問題開始之前做了一次git reset --hard <sha>的提交。本地分支從Origin分支發散,但我不想合併/ fastforward

我已經解決了問題並在本地提交。現在我想推到Origin,但是我不能這樣做,因爲我的分支是由5次提交(導致問題)和1次提交(修復提交)提前後面的Origin。即。分支分支。

我不想合併來自Origin的任何更改。我怎樣才能將Origin的頭部設置爲我的本地提交的頭部,而不需要合併到我的本地分支中的分割提交?

謝謝!

回答

6

的清潔方式(即保留歷史)

  1. 在當前創建本地bug修正分公司提交
  2. 結賬主(或任何起源),並把它快進到破遠程HEAD
  3. git revert壞提交(最後一個好SHA,你叉,並遠程端之間的一切)...這同時保留所有的歷史
  4. 合併你刪除不必要的更改[R缺陷修復分支到主:現在所有主的變化都已恢復,這將是一個簡單的合併

骯髒的方式(丟棄歷史,discombobulates別人對遠程分支機構工作)

  1. 只是使用git push -f(仔細檢查你有正確的選項&的Refspec),並希望沒有其他人已經有了他們
+0

謝謝! 'git push -f'已經成功了。我造成了中斷並應用了修復程序(現在),因此不需要保留重大更改。出於興趣,如果其他任何人的遠程分支歷史在其下面發生變化,會出現什麼問題? – Nick

+0

_they_將無法再推動,因爲他們的HEAD不再與遠程HEAD相關(既不是另一個的祖先,儘管它們在你最後一次良好的_sha_中共享一個共同的祖先)。他們最好的選擇是重新設計或者將他們的改變挑選到新的遠程分支上。 – Useless

+1

您通常會避免'git push -f'出於同樣的原因,您永遠不會重新綁定已發佈的提交。如果任何人擁有舊版本,他們的存儲庫會處於需要手動修復的狀態以恢復到可以與其他人交互的狀態。 – poke

2

下他們的遠程分支的歷史變化。如果你不想扔掉他做的那些壞提交,即fo [R保持歷史仍然存在,但只是爲了拒絕那個那裏發生的變化,你可以使用ours合併策略:

git merge -s ours badbranch 

這本質上創建了一個合併提交,只是需要從當前分支的所有變化。它將完全忽略badbranch上發生的事情,但仍會將其納入歷史。所以你可以查看那裏發生的變化,但是它們不會影響你當前的版本。否則,如果你只是想完全拋棄它們,並且如果你完全控制了存儲庫並且不關心從你的存儲庫中取出的其他人,那麼你可以覆蓋分支,從本質上刪除那些提交存儲庫(除非你有另一個分支指向它)。你這樣做,通過強制推送:

git push origin master -f 

注意,這將爲其他人的衝突對誰可能已經獲取這些變化的倉庫工作,所以不這樣做,除非你真的意識到這一點。通常最好在歷史中保持糟糕的承諾。

相關問題