問題陳述:
我有 2 個主要分支:master(PROD) & dev(UAT)。每當我的團隊收到應用程式的更改請求時,我們會從 master 創建一個分支來進行更改,并且在將分支合并到 master 之前,我們會執行“git pull origin master”,以便我們的分支代碼必須與 master 代碼同步.
2月初,我的同事將一個分支合并為master。但是這里的分支不是從 master 創建的。所以主人被污染了。我恢復了更改,但恢復不正確。我所做的是“git revert -m 2”。還原提交后,master 上有 3 次合并提交。
我有最后一個提交 ID,直到主分支沒有被污染。我主要關心的是我希望主人是干凈的。
問題:
- 如何回到讓主人干凈的提交?
- 有一些分支與被污染的 master 同步。如何以使 master 的還原操作也適用于分支的方式清理 master?
提前致謝。
PS:我沒有任何 GUI 工具。
uj5u.com熱心網友回復:
我所做的是“git revert -m 2”。還原提交后,master 上有 3 次合并提交。
首先,git revert不洗掉任何提交。這就是git revert. 因此,如果您的抱怨是合并提交仍然存在,那是正常的,您不應該抱怨它。
另一方面,您似乎給出了錯誤的命令。恢復合并提交以使傳入分支對主線分支沒有影響的方法是說
git revert -m 1 <SHA>
換句話說,你-m 2在應該說的時候說了-m 1。
此時你有兩個選擇。
一種可能性是還原壞的還原,然后進行良好的還原。
另一種可能性是
reset --hard回到糟糕的合并之前的狀態——但如果這是共享材料,這是不受歡迎的,因為它會使其他人的生活變得非常困難。
uj5u.com熱心網友回復:
如果你知道你想要它的好處(比如good123),那么在本地回到原始狀態的最簡單方法是:
git checkout master
git reset --hard good123
這會讓你的本地master在good123之后好像什么都沒有發生過。
如果您希望服務器(源/主服務器)處于相同狀態,那么您需要“強制推送”。這是危險的,因為它會覆寫遠程狀態,并迫使你的同伴處理這種情況。確保你有一個備份。
git push -f origin
團隊中的任何其他人都需要為他們的作業創建一個新分支(例如mytask2)并與這個更新的主節點重新同步。最好的方法取決于他們在“污染”狀態之上做了多少作業。在最簡單的情況下,他們mytaskcommit123在“污染”之前只有一次提交是做一個“櫻桃采摘”:
git fetch origin
git checkout master
git reset --hard origin/master
git checkout -b mytask2
git cherry-pick mytaskcommit123
請注意,在 git 中沒有單一的主人。每個開發人員有 2 個 master 副本:
- 本地電腦:master
- 遠程服務器:源/主
因此,每個開發人員都需要更新兩者。在上面的腳本中,“fetch”更新遠程的,“reset”更新本地的。
對于更復雜的情況git rebase -i或git reset --mixed可能會有所幫助。
根據它的作業量,考慮將受污染的歷史記錄保持原樣,并僅恢復損壞的提交。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/436392.html
下一篇:限制GitHub上的分支名稱
