我正在尋找使用GitHub流,我有一個問題。Github流去除提交和歷史變化
我回購(A,B,C,d是從合併在拉入請求合併提交)
(主)-------------甲----- -B ------- C ------- D(HEAD)
說出我在B中犯的一個缺陷,但我需要做一個包含C和D的部署。我怎麼能刪除/隱藏B直到部署並重新放入?
我正在尋找使用GitHub流,我有一個問題。Github流去除提交和歷史變化
我回購(A,B,C,d是從合併在拉入請求合併提交)
(主)-------------甲----- -B ------- C ------- D(HEAD)
說出我在B中犯的一個缺陷,但我需要做一個包含C和D的部署。我怎麼能刪除/隱藏B直到部署並重新放入?
使用git revert B -m 1
您創建了一個新提交,用於撤消您通過合併到PR分支中引入的更改。您稍後可以再次執行相同的操作,但在命令中使用還原提交還原還原。在那裏你不需要-m 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
還有其他的方式,但這些包括主要選項。
以這種方式恢復B是否保持C&D中的更改?在B中改變了什麼,然後在C或D中改變了? – Tom
恢復只是創建一個額外的提交,撤消您恢復提交中完成的操作。你仍然會在歷史中合併,C和D沒有被觸及。如果您在C或D中更改了相同的代碼,則會發生需要解決的衝突。 – Vampire