我有一个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
红糖糍粑
TA贡献1815条经验 获得超6个赞
考虑到您的例子,您必须这样做(假设您在分行“主人”上):
git revert master~3..master
这将在本地创建一个新提交,其反向提交为B、C和D(这意味着它将撤消这些提交带来的更改):
A <- B <- C <- D <- BCD' <- HEAD
守着星空守着你
TA贡献1799条经验 获得超8个赞
这允许您轻松地选择连续提交来恢复。
# revert all commits from B to HEAD, inclusively $ git revert --no-commit B..HEAD $ git commit -m 'message'
- 3 回答
- 0 关注
- 751 浏览
添加回答
举报
0/150
提交
取消