删除特定特定提交之下的提交

时间:2019-04-02 06:09:13

标签: git version-control

我拉了一些项目来学习一些东西。我碰巧在同一项目中从头开始创建我的作品。在现有提交的基础上提交我的更改。我需要删除特定提交之下的所有提交,并将其作为初始提交。

情况是这样的:

enter image description here

所以我想删除X到Y的所有提交。

我确实调查了Removing commits before specific commit之类的帖子 但无法实现我想要的。

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

您需要重写整个历史记录。

解决方案1:

# suppose you are now on the branch master
git checkout --orphan temp CommitY
# make the new root commit
git commit 
# apply the commits after CommitY to temp
git cherry-pick CommitY..master
# reset master to the new head
git checkout master
git reset temp --hard
git branch -D temp

解决方案2:

为了清楚地演示该过程,我们将CommitX标记为A,然后将其标记为B,C,D(CommitY),E和F(Head)。

git rebase -i --root

然后您将看到带有内容的编辑器:

pick 6988ba0 A
pick cd42d7a B
pick 6b1aa54 C
pick d4bc4d1 D
pick 54c78e5 E
pick fc2f728 F

pickBC中的D更改为squashs

pick 6988ba0 A
s cd42d7a B
s 6b1aa54 C
s d4bc4d1 D
pick 54c78e5 E
pick fc2f728 F

保存并退出。弹出另一个带有默认提交消息的编辑器,供您输入新根目录的提交消息。编辑后,保存并退出。 ABCD被压缩为新根目录的一次提交。重新应用EF

以两种方式重写/重建提交,因此它们的哈希值是新的。您可能需要强制推送以更新远程存储库中的分支。