2017-09-08 83 views
0

我知道有很多關於在git中撤銷合併的信息,但我似乎無法在我的具體情況中找到任何有關如何執行此操作的共識。撤消由bitbucket請求創建的git合併

有人本質經由到位桶拉入請求合併我們develop分公司我們master分支。這只是今天發生的,所以這是在master分支上完成的最後一件事(我們不必擔心在合併提交之上的其他提交)。

注:我們舉辦到位桶自己,所以我們必須到位桶的舊版本。沒有回覆拉動請求選項。

從我讀過,有本質上的混帳處理這兩種方式:

  1. git reset --hard *<SHA of commit before the merge>*

    • 這將刪除合併提交,就好像它從來沒有發生過。
    • 到處都是我讀到「重寫歷史是不好的做法」或「從不在公開共享的回購中做這件事」,但他們從來沒有真正解釋過爲什麼不這樣做。這似乎可以解決問題,並且從現在開始6個月後,我們確實想要重做此合併,從developmaster
    • 如果這是做到這一點的最佳方法,它,在bitbucket中的pull請求會發生什麼?該pull請求仍然存在於bitbucket中,但是我們正在移除它創建的合併提交,那麼會以任何方式搞亂bitbucket?
  2. git revert -m 1 *<SHA of the merge commit>*

    • 這將創建一個新的提交是撤消由合併所行一切的變化
    • 這將是罰款,但我們打算在以後的合併developmaster日期(下一版本)以及我讀過的內容,我們必須記得在執行此操作之前恢復我們的恢復提交,否則當我們將develop合併到master時,我們今天還原的更改將不會包含在內。 6個月後,我真的不想讓這個問題成爲問題,當時沒有人記得這個回覆。

TL; DR:我對由於這些問題做git revert猶豫可能會導致從現在6個月當我們想再次做合併。我也在做git reset猶豫不決,因爲每個人都似乎警告不要這樣做,並且它可能會導致與bitbucket上的pull請求有關的問題。

回答

1

你也可以做。真的沒有決定性的技術原因會決定你該怎麼做。

  1. 在特殊情況下,它是確定以更新非正向。向每個人解釋,問問拉錯了主人的團隊,幫助他們恢復。

  2. 您可以轉發development分支恢復提交,然後revert the revert,並返回到它的內容。

PS的情況下2:

對於原來如此

* 73d5415 (HEAD -> master) master3 
| * e660100 (development) development3 
| * 0356d3a development2 
| * 6cefad0 development1 
|/ 
* 209d967 master2 
* dc25505 master1 

您將合併成developmentmaster,並恢復它。

* 7a4f94a (HEAD -> master) Revert "Merge branch 'development'" 
* 75e1e34 Merge branch 'development' 
|\ 
| * e660100 (development) development3 
| * 0356d3a development2 
| * 6cefad0 development1 
* | 73d5415 master3 
|/ 
* 209d967 master2 
* dc25505 master1 

我們修復它,你務必做好

$ git checkout development 
$ git merge --ff-only master 
$ git revert 7a4f94a (the "Revert" commit) 

結果:

e7b511a (HEAD -> development) Revert "Revert "Merge branch 'development'"" 
* 7a4f94a (master) Revert "Merge branch 'development'" 
* 75e1e34 Merge branch 'development' 
|\ 
| * e660100 development3 
| * 0356d3a development2 
| * 6cefad0 development1 
* | 73d5415 master3 
|/ 
* 209d967 master2 
* dc25505 master1 

e7b511a包含了所有的開發曾經是不是高手,可以合併以後掌握。雖然所有這些都表示爲單一提交,但如果您的意思是指責某些問題,則需要在e660100之後再撥打一個電話。

+0

你能否詳細說明2號?我沒有關注。特別是與您使用「前進」。你是否說有一種方法可以改變'develop',以便在6個月內從'develop'到'master'合併時考慮到恢復? –

+0

添加圖例 – max630

+0

感謝您的詳細解答。我一定會將這標記爲公認的答案,但還有一件事情。我們不能做從主人到開發人員的快速合併,因爲我們在主人身上進行了還原,因此還有其他發展承諾。這會改變什麼嗎?我還可以通過開發合併提交而不是快進合併來完成此任務嗎? –

0

[由於我還沒有得到足夠的聲譽,我不能把評論你的問題,所以加入我的答案評論]

我知道恢復到主的舊哈希的唯一方法(不顯示合併提交,然後提交反轉)是force-push。有關示例和選項,請參閱git force-push

這是一個值得商榷的答案,因爲有很多人反對。但是,當您使用bitbucket時,可以控制force-push,即啓用它以進行操作並禁用主設備的force-push

注意:bitbucket最新插件如rebasesquash使用--force-with-lease

+0

感謝您的回答,但我認爲您誤解了我的要求。我知道如果我使用'git reset --hard',我必須強制推動,但是我的問題是最好是這樣做,還是應該'git revert'來代替,這不會重寫歷史,因此不會造成推動力。重讀我的問題,瞭解爲什麼我對使用這兩種方法猶豫不決。 –

+0

'git reset'和'force push'會重寫歷史記錄,所以人們建議不要使用它,但如果你有控制權(bitbucket提供),那麼它可以用於這種情況。 正如我所看到的沒有任何建議給出你正在尋找的確切答案,所以我可能會建議你創建一個虛擬文件庫和分支的虛擬庫?重現上面的情況,看看哪種解決方案適合你。通過這種方式,你可以安全地嘗試很多東西而不會打擾你的主人。 – RuSh