如何恢复多个git提交?

我有一个Git存储库,如下所示:

A -> B -> C -> D -> HEAD

我希望分支机构的负责人指向A,也就是说,我希望B,C,D和头消失,我希望头部与A同义。

听起来,我可以尝试重基(不适用,因为我在两者之间推动了更改),或者恢复。但是如何还原多个提交呢?我一次只回复一次吗?命令重要吗?


GCT1015
浏览 712回答 3
3回答

子衿沉夜

一般规则是,您不应该重写(更改)您已经发布的历史,因为可能有人将他们的工作建立在它的基础上。如果您重写(更改)历史记录,则合并它们的更改和为它们进行更新时会出现问题。因此,解决方案是创建一个新提交哪一个回复变化你想摆脱的。你可以用GIT还原命令。你的情况如下:A <-- B  <-- C <-- D                                               <-- master <-- HEAD(此处的箭头引用指针的方向:提交时的“父”引用,分支头(分支引用)的顶部提交,头部引用的分支名称)。您需要创建的内容如下:A <-- B  <-- C <-- D <-- [(BCD)^-1]                   <-- master <-- HEAD其中“[(BCD)^-1]”是指恢复提交B、C、D中更改的提交,数学告诉我们(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"另一种解决办法是结帐 内容提交A,并提交此状态:$ git checkout -f A -- . $ git commit -a那么,您将遇到以下情况:A <-- B  <-- C <-- D <-- A'                       <-- master <-- HEAD提交A‘与提交A具有相同的内容,但是不同的提交(提交消息、父母、提交日期)。$ git reset --hard A $ git reset --soft @{1}  # (or ORIG_HEAD), which is D $ git commit

红糖糍粑

考虑到您的例子,您必须这样做(假设您在分行“主人”上):git revert master~3..master这将在本地创建一个新提交,其反向提交为B、C和D(这意味着它将撤消这些提交带来的更改):A <- B <- C <- D <- BCD' <- HEAD

守着星空守着你

这允许您轻松地选择连续提交来恢复。# revert all commits from B to HEAD, inclusively $ git revert --no-commit B..HEAD   $ git commit -m 'message'
打开App,查看更多内容
随时随地看视频慕课网APP