一般规则是,您不应该重写(更改)您已经发布的历史,因为可能有人将他们的工作建立在它的基础上。如果您重写(更改)历史记录,则合并它们的更改和为它们进行更新时会出现问题。因此,解决方案是创建一个新提交哪一个回复变化你想摆脱的。你可以用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