如何在gitlab中删除一些中间提交?

问题描述 投票:-2回答:4

我需要git / gitlab中的帮助。我有测试仓库的gitlab例如6次提交:A-> B-> C-> D-> E-> F提交A是第一个,F是最后一个。我该怎么做:删除提交B,C,D,E?我只想拥有第一个和最后一个”A-> F我这样做是因为我的回购权重很大。我应该输入什么命令?

git gitlab git-commit
4个回答
1
投票
  1. 开始交互式变基,选择要早于要删除的提交之前的提交,例如A。

    git rebase -i <hash-A>
    
  2. 一个文件打开,列出了最多A个提交,并带有选择所有提交的指令。

    在打开的文件中,删除要删除的提交行。

  3. 保存并关闭文件。

    rebase将自动开始并应用您想要的更改。

  4. 推送您的更改,由于重写历史记录,因此需要强行推动。

    git push -f
    

1
投票

通常,您想做的是使用另一个答案建议的交互式变基。

如果您熟悉变基的工作原理,还可以执行以下操作:

git rebase rev-of-E rev-of-F --onto rev-of-A

例如如果您的头位于F,则可以执行

git rebase HEAD~ HEAD --onto HEAD~5

1
投票

假设您目前在分支master上,并且没有其他人在该仓库上工作:

git checkout <hash-A>
git cherry-pick <hash-F>
git branch -f master
git checkout master

然后,如果您对结果满意,可以:

git push -f origin master

[请记住,您将永久丢失对B到E提交所做的所有更改。


0
投票

[谢谢,但是我选中了Cherry-pick和rebase选项,并且删除了提交。我的问题是我也想从B-E归档文件。当前回购的大小是相同的,但是没有提交B-E。我应该怎么做才能删除提交B-E并从提交B-E中删除文件?]

© www.soinside.com 2019 - 2024. All rights reserved.