我需要git / gitlab中的帮助。我有测试仓库的gitlab例如6次提交:A-> B-> C-> D-> E-> F提交A是第一个,F是最后一个。我该怎么做:删除提交B,C,D,E?我只想拥有第一个和最后一个”A-> F我这样做是因为我的回购权重很大。我应该输入什么命令?
开始交互式变基,选择要早于要删除的提交之前的提交,例如A。
git rebase -i <hash-A>
一个文件打开,列出了最多A个提交,并带有选择所有提交的指令。
在打开的文件中,删除要删除的提交行。
保存并关闭文件。
rebase将自动开始并应用您想要的更改。
推送您的更改,由于重写历史记录,因此需要强行推动。
git push -f
通常,您想做的是使用另一个答案建议的交互式变基。
如果您熟悉变基的工作原理,还可以执行以下操作:
git rebase rev-of-E rev-of-F --onto rev-of-A
例如如果您的头位于F
,则可以执行
git rebase HEAD~ HEAD --onto HEAD~5
假设您目前在分支master
上,并且没有其他人在该仓库上工作:
git checkout <hash-A>
git cherry-pick <hash-F>
git branch -f master
git checkout master
然后,如果您对结果满意,可以:
git push -f origin master
[请记住,您将永久丢失对B到E提交所做的所有更改。
[谢谢,但是我选中了Cherry-pick和rebase选项,并且删除了提交。我的问题是我也想从B-E归档文件。当前回购的大小是相同的,但是没有提交B-E。我应该怎么做才能删除提交B-E并从提交B-E中删除文件?]