如何恢復git中的一系列提交?從查看gitrevisions文檔,我看不到如何指定我需要的範圍。例如:恢復git中的一系列提交
A -> B -> C -> D -> E -> HEAD
我想做的相當於:
git revert B-D
它的結果將是:
A -> B -> C -> D -> E -> F -> HEAD
其中F包含B-d包容性的逆轉。
如何恢復git中的一系列提交?從查看gitrevisions文檔,我看不到如何指定我需要的範圍。例如:恢復git中的一系列提交
A -> B -> C -> D -> E -> HEAD
我想做的相當於:
git revert B-D
它的結果將是:
A -> B -> C -> D -> E -> F -> HEAD
其中F包含B-d包容性的逆轉。
你使用的是什麼版本的Git?
僅在Git1.7.2 +中支持多個提交才能恢復:有關更多詳細信息,請參閱「Rollback to an old commit using revert multiple times.」。
當前git revert
man page僅針對當前 Git版本(1.7.4+)。
正如評論OP Alex Spurling報告:
升級到1.7.4工作正常。
要回答我的問題,這是我一直在尋找的語法:
git revert B^..D
B^
指「第一父提交B的」:即允許包括在復歸B
。
見「git rev-parse
SPECIFYING REVISIONS section」,其中包括了<rev>^
, e.g. HEAD^
語法:多見於「What does the caret (^
) character mean?」)
注意,每個回覆提交單獨提交。
git revert OLDER_COMMIT^..NEWER_COMMIT
如下圖所示,你可以不提交馬上回復:
git revert -n OLDER_COMMIT^..NEWER_COMMIT
git commit -m "revert OLDER_COMMIT to NEWER_COMMIT"
謝謝那就是答案。升級到1.7.4可以正常工作。爲了回答我自己的問題,這是我正在尋找的語法: git revert B^.. D – 2011-02-14 14:56:14
@Alex:太棒了!我已將您的評論納入我的回答。 – VonC 2011-02-14 15:04:18
使用git rebase -i
壁球相關的提交到一個。然後你只需要一次提交即可恢復。
做git revert OLDER_COMMIT^..NEWER_COMMIT
我沒有工作,我用git revert -n OLDER_COMMIT^..NEWER_COMMIT
,一切都很好,我使用Git版本1.7.9.6
。
如果要恢復承諾b到d的(至少在Git版本2)在一個單一提交,你可以做
git revert -n B^..D
這種恢復通過提交從B的父母所做的更改提交(不包括)提交給D提交(包含),但不會對已還原的更改創建任何提交。恢復只修改工作樹和索引。
不要忘記之後
git commit -m "revert commit range B to D"
提交更改,也可以轉而多個無關提交的單一提交,使用同樣的方法。例如恢復B和d但不是C
git revert -n B D
git commit -m "Revert commits B and D"
參考:https://www.kernel.org/pub/software/scm/git/docs/git-revert.html
邁向gitrevisions(7)頁的端部,有爲首的部分「指定覆蓋範圍」。你想要什麼與那裏描述的不同? – 2011-02-14 11:30:43
gitrevisions頁面顯示'git revert A..D'會做我想做的事。但是,當我嘗試,我得到的錯誤「致命的:無法找到'A..D'」 – 2011-02-14 11:36:48
[Git恢復多個提交](http://www.singhajit.com/git-revert-multiple-commits/) – 2016-02-11 18:50:23