我拉了一些项目来学习一些东西。我碰巧在同一项目中从头开始创建我的作品。在现有提交的基础上提交我的更改。我需要删除特定提交之下的所有提交,并将其作为初始提交。
情况是这样的:
所以我想删除X到Y的所有提交。
我确实调查了Removing commits before specific commit之类的帖子 但无法实现我想要的。
感谢任何帮助。
答案 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
将pick
,B
和C
中的D
更改为squash
或s
。
pick 6988ba0 A
s cd42d7a B
s 6b1aa54 C
s d4bc4d1 D
pick 54c78e5 E
pick fc2f728 F
保存并退出。弹出另一个带有默认提交消息的编辑器,供您输入新根目录的提交消息。编辑后,保存并退出。 A
,B
,C
和D
被压缩为新根目录的一次提交。重新应用E
和F
。
以两种方式重写/重建提交,因此它们的哈希值是新的。您可能需要强制推送以更新远程存储库中的分支。