为了账号安全,请及时绑定邮箱和手机立即绑定

如何恢复多个git提交?

如何恢复多个git提交?

Git
GCT1015 2019-07-13 16:27:08
我有一个Git存储库,如下所示:A -> B -> C -> D -> HEAD我希望分支机构的负责人指向A,也就是说,我希望B,C,D和头消失,我希望头部与A同义。听起来,我可以尝试重基(不适用,因为我在两者之间推动了更改),或者恢复。但是如何还原多个提交呢?我一次只回复一次吗?命令重要吗?
查看完整描述

3 回答

?
子衿沉夜

TA贡献1828条经验 获得超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


查看完整回答
反对 回复 2019-07-13
?
红糖糍粑

TA贡献1815条经验 获得超6个赞

考虑到您的例子,您必须这样做(假设您在分行“主人”上):

git revert master~3..master

这将在本地创建一个新提交,其反向提交为B、C和D(这意味着它将撤消这些提交带来的更改):

A <- B <- C <- D <- BCD' <- HEAD


查看完整回答
反对 回复 2019-07-13
?
守着星空守着你

TA贡献1799条经验 获得超8个赞

这允许您轻松地选择连续提交来恢复。

# revert all commits from B to HEAD, inclusively
$ git revert --no-commit B..HEAD  
$ git commit -m 'message'


查看完整回答
反对 回复 2019-07-13
  • 3 回答
  • 0 关注
  • 702 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信