3 回答

TA貢獻1828條經(jīng)驗 獲得超3個贊
一般規(guī)則是,您不應(yīng)該重寫(更改)您已經(jīng)發(fā)布的歷史,因為可能有人將他們的工作建立在它的基礎(chǔ)上。如果您重寫(更改)歷史記錄,則合并它們的更改和為它們進行更新時會出現(xiàn)問題。
因此,解決方案是創(chuàng)建一個新提交哪一個回復(fù)變化你想擺脫的。你可以用GIT還原命令。
你的情況如下:
A?<--?B??<--?C?<--?D???????????????????????????????????????????????<--?master?<--?HEAD
(此處的箭頭引用指針的方向:提交時的“父”引用,分支頭(分支引用)的頂部提交,頭部引用的分支名稱)。
您需要創(chuàng)建的內(nèi)容如下:
A?<--?B??<--?C?<--?D?<--?[(BCD)^-1]???????????????????<--?master?<--?HEAD
其中“[(BCD)^-1]”是指恢復(fù)提交B、C、D中更改的提交,數(shù)學(xué)告訴我們(BCD)^-1=D^-1C^-1B^-1,因此可以使用以下命令獲得所需的情況:
$?git?revert?--no-commit?D $?git?revert?--no-commit?C $?git?revert?--no-commit?B $?git?commit?-m?"the?commit?message"
另一種解決辦法是結(jié)帳?內(nèi)容提交A,并提交此狀態(tài):
$?git?checkout?-f?A?--?. $?git?commit?-a
那么,您將遇到以下情況:
A?<--?B??<--?C?<--?D?<--?A'???????????????????????<--?master?<--?HEAD
提交A‘與提交A具有相同的內(nèi)容,但是不同的提交(提交消息、父母、提交日期)。
$?git?reset?--hard?A $?git?reset?--soft?@{1}??#?(or?ORIG_HEAD),?which?is?D $?git?commit

TA貢獻1815條經(jīng)驗 獲得超6個贊
考慮到您的例子,您必須這樣做(假設(shè)您在分行“主人”上):
git?revert?master~3..master
這將在本地創(chuàng)建一個新提交,其反向提交為B、C和D(這意味著它將撤消這些提交帶來的更改):
A?<-?B?<-?C?<-?D?<-?BCD'?<-?HEAD

TA貢獻1799條經(jīng)驗 獲得超8個贊
這允許您輕松地選擇連續(xù)提交來恢復(fù)。
#?revert?all?commits?from?B?to?HEAD,?inclusively $?git?revert?--no-commit?B..HEAD?? $?git?commit?-m?'message'
- 3 回答
- 0 關(guān)注
- 812 瀏覽
添加回答
舉報