【问题标题】:how to delete the first commit and make its immediate child the root如何删除第一个提交并使其直接子节点成为根
【发布时间】:2017-12-28 05:20:54
【问题描述】:

我有来自 git 提交的 commit-id1,但这是第一次提交,所以它没有父级。有一个commit-id2 是它的直系孩子。

这是commit-id1 ----> commit-id2 ----> commit-id3 ...的场景

有没有一种安全的方法可以删除commit-id1 并使commit-id2 成为第一次提交

commit-id2 ----> commit-id3 ...

我读到了git rebase -onto,但它需要父母并且无法弄清楚

编辑:提交被推送到服务器,我也想从服务器中删除它

【问题讨论】:

  • 你试过--root吗?
  • 该命令会像git rebase --root commit-id2 这样吗?我没有遇到这个谢谢你的提示
  • 你为什么喜欢它?相关分支的整个历史将不得不被重写或分散。如果许多分支都在合作,那么对于已发布的分支来说这不是一个好主意。
  • 我并不担心这一点,因为我从未在我的问题中提到过这一点。如果问题需要修改,请告诉我

标签: git


【解决方案1】:

你应该这样做

$ git rebase -i --root

这将启动一个交互式变基。您的文本编辑器将打开一个列表,其中列出了将被重新设置的所有提交以及说明。编辑文件以跳过第一次提交。现在保存文件并关闭文本编辑器。

这将从您的本地历史记录中删除提交。如果您需要更新远程,则必须强制推送,就像任何本地历史修订一样:

$ git push origin master

origin 替换为适当的远程名称,将master 替换为适当的分支名称。

【讨论】:

  • 这也会删除服务器上的文件吗?
  • @knk 我假设您的意思是“删除提交”(和相关内容)。我将更新我的答案以包括这一点。
  • @Code-Apprentice git push -f origin mastergit push origin +master.
  • 致命:需要一个修订版
  • @AlexeySh。如果您在尝试使用我在此处给出的解决方案时遇到问题,您应该发布一个新问题。请务必包含您尝试过的确切步骤以及返回此问题的链接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多