-1

从 master 分支有两个分支:develop 和 foo。develop 和 foo 都与 master 发生了几次提交不同。

foo 已合并到开发中。现在 foo 和 develop 指向同一个合并提交,即提交的两个“流”在这个合并提交中相遇(对于近似词汇表示歉意)。

此合并提交中的代码与应有的完全一致。没有什么是应该撤消的。

现在假设没有人会想要检查 foo 的任何先前提交。所以,我们想“删除”这些提交(即不撤消这些提交带来的修改,只是没有它们在历史记录中。事实上,查看历史记录,它看起来好像 foo 从未存在过,并且合并提交不再是两个“提交流”的交汇点)。

当然,如果 foo 在合并到 develop 之前被压扁会更好,但这并没有发生。

在合并后尝试 rebase/squash foo 以解决一些冲突。由于代码与合并提交中的代码完全相同,因此不需要解决冲突(免责声明:可能是未以正确的方式尝试此变基)。

有没有办法做到这一点 ?

4

2 回答 2

0

重写头部提交develop

$ git checkout develop

# move back one commit, keep all differences in the index
#  (as if you had already 'git added' them) :
$ git reset --soft HEAD^

# commit this as a simple commit :
$ git commit
于 2020-04-30T16:25:36.320 回答
0

执行开发分支的交互式变基。这样做可以让你将提交压缩到已经存在的提交中。由于您正在重写历史记录,因此您可以选择要从历史记录中删除的提交

如果您使用的是 git 2.23 之前的版本:

git checkout develop
git rebase --interactive SHA_of_last_good_commit

如果您使用的是 git 2.23 或更新版本:

git switch develop
git rebase --interactive SHA_of_last_good_commit

使用 -i/--interactive 参数运行 rebase,使用最后一个“好”提交的 SHA1(即我们要修改的提交的父提交)。这将打开交互式窗口,您可以在其中看到从上次“良好”提交到当前分支顶部的所有提交,按时间顺序列出(较旧的提交在文件顶部

于 2020-04-30T21:20:16.937 回答