2017-05-18 86 views
0

我正在尋找使用GitHub流,我有一個問題。Github流去除提交和歷史變化

我回購(A,B,C,d是從合併在拉入請求合併提交)

(主)-------------甲----- -B ------- C ------- D(HEAD)

說出我在B中犯的一個缺陷,但我需要做一個包含C和D的部署。我怎麼能刪除/隱藏B直到部署並重新放入?

回答

2

使用git revert B -m 1您創建了一個新提交,用於撤消您通過合併到PR分支中引入的更改。您稍後可以再次執行相同的操作,但在命令中使用還原提交還原還原。在那裏你不需要-m 1參數,因爲它沒有合併提交,你恢復。

+0

以這種方式恢復B是否保持C&D中的更改?在B中改變了什麼,然後在C或D中改變了? – Tom

+1

恢復只是創建一個額外的提交,撤消您恢復提交中完成的操作。你仍然會在歷史中合併,C和D沒有被觸及。如果您在C或D中更改了相同的代碼,則會發生需要解決的衝突。 – Vampire

1

有幾個選項。我建議恢復是最好的選擇。人們往往不喜歡由此產生的歷史,但海事組織在實際問題上提出了審美意識。所以,你必須

A -- B -- C -- D <--(master) 

如果你

git revert B 

你會得到

A -- B -- C -- D -- ~B <--(master) 

產生相同的樹

A -- C -- D <--(master) 

您應該測試,因爲它是樹的新狀態。

然後解決B您想創建其變化

git revert ~B 

A -- B -- C -- D -- ~B -- ~~B <--(master) 

(其中~~B作出了同樣的變化B),然後做你的修復。我會申請使用--amend的變化,使你

A -- B -- C -- D -- ~B -- B+ <--(master) 

完成(其中B+B適用修正後的變化)。

現在有些人不喜歡看到B更改完成,然後撤消,然後重做。我認爲這有點狂妄(而不是有用的),但是,嘿,如果你真的想要的話,我可以選擇。

您可以選擇rebase。由於這顯然是已經被推變化,你需要協調所有的開發者,他們將不得不在git rebase文檔(https://git-scm.com/docs/git-rebase

git rebase --interactive A master 
在執行「從上游底墊中恢復」中列出的步驟

編輯TODO列表。有幾種方法可以做到這一點,但假設我們只是將B移至最後,隨時準備接收修復程序。所以從字面上看,只需將B的行移動到列表的末尾即可。現在你有

A -- C' -- D' -- B' <--(master) 

(其中x'是做同樣的事情,但在不同的「基地」的x重寫 - 即不同的父)。

當然,你真的想要master^(現在省略B')。更好地測試它(這是一個新的代碼狀態)。那麼你將不得不強制推

git push -f master^:master 

還有其他的方式,但這些包括主要選項。