git - 删除某个提交,就好像它从未发生过一样

标签 git

我有一个看起来像的日志

c2ba4f3cfd3e8b29e634b41d7178ffe38f8c9f0a version 0.1 d825b48fe86107c3842f62c9e9bc5f290a2c2475 test2 0a06037c3c29a0c9446707e884d9b2777336db59 test c7453d959fc86d2868076b3900e0fd1ed63e2709 begin



所有已经推送到我的原始服务器,但我想以这样一种方式 merge 提交,看起来我所做的唯一一个是带有评论 version 0.1 的提交。 .当我推送它时,服务器也必须反射(reflect)提交 merge 。

简而言之,我希望存储库有一个包含我命名的内容的提交。

我一整天都在尝试 rebase 并没有得到想要的结果。我怎样才能做到这一点?

最佳答案

强制性警告:更改已经推送到远程存储库的历史记录对于使用该存储库的任何其他人来说可能是一个非常头痛的问题。

互动rebase会带你到那里。

# start an interactive rebase onto the parent (~) of 'begin'
git rebase -i c7453d9~

交互式 rebase 会将您带入一个如下所示的编辑器:
pick c7453d9 begin
pick 0a06037 test
pick d825b48 test2
pick c2ba4f3 version 0.1

如果你想保留所有提交的所有更改,但让它们看起来像一次提交 ,改成这样:
reword c7453d9 begin
fixup 0a06037 test
fixup d825b48 test2
fixup c2ba4f3 version 0.1
reword将提示您更改提交消息(将其更改为“版本 0.1”),以及 fixup将所有内容从提交中提取到前一个提交中。最终结果将是包含所有四个内容的单个提交。

另一种方法来完成同样的事情:
pick c7453d9 begin
fixup 0a06037 test
fixup d825b48 test2
squash c2ba4f3 version 0.1
squash将提交的内容 pull 入前一次提交,但允许您更改提交消息(在本例中为“版本 0.1”)。

如果您想完全放弃前三个提交的更改,而只保留最后一个 的更改, 将 rebase 行更改为:
pick c2ba4f3 version 0.1

基本上,删除前三行。最终结果将只是“版本 0.1”提交,没有先前提交的任何内容。

修改历史记录后,您需要强制输入 push到您的 Remote --force .

关于git - 删除某个提交,就好像它从未发生过一样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12083212/

相关文章:

Git pull - 无法提交 merge 消息

git - 从 master 分支和从 dev 分支 merge 的区别

Git 避免 "merge branch master"

git - Jenkins 和 Git : Monitor specific folder on any branch

git - 提交编码更改

git - 如何在 Git 中将以前的版本恢复为新提交?

具有多个存储库的 Git instaweb 无法正常工作

git - 本地分支机构与集市?

git - 如何删除名为 "--orphan"的分支

git - 一个提交 git 怎么可能有不同的提交 ID?