如何删除两个修订号之间的文件提交?

时间:2016-07-21 21:57:52

标签: git

我有一个git repo,我在其中为Android提交了我的apk版本。我猜这是一个坏主意,但我这样做是因为有时我需要回到某个apk版本来测试和重建不是一个选项,因为gradle依赖关系通常不再可用。

所以现在我的回购是2场演出,我需要留出一些空间。最后一次发生这种情况我做错了什么并失去了一些历史,所以我想确保我这次做得很好,因为我并不像上次那样匆忙。

基本上我每次构建它时都会提交我的apk,并将其发布给测试用户。我想从我的回购历史中删除所有非生产apks。所以基本上我想删除修订xyz和修订版abc之间的所有apks。我希望在xyz和abc之后的所有内容之前保留所有内容。我应该提到apk总是有相同的文件名,这个repo专门用于apk文件。

我该怎么做?

感谢。

1 个答案:

答案 0 :(得分:0)

假设提交历史记录与A-B-xyz-C-D-abc-E-F<----master类似。

git branch backup_master master
git rebase --strategy=recursive -X theirs --onto B abc master

xyz C D abc已从历史记录中删除,现在预计会像A-B-E'-F'一样。由于apk是二进制文件,因此在此类rebase期间始终存在冲突。这就是我们在这里需要--strategy=recursive -X theirs的原因。在完成rebase之后,你可以做一些检查以查看E中的apk和E'中的apk是否相同。如果E没问题,我们可以确定之后的提交也没问题。

git rev-parse E:<apk_path>
git rev-parse E':<apk_path>

如果两个输出相同,现在一切都好。

如果我们不使用--strategy=recursive -X theirs,则因应冲突而应用E时会停用rebase。如果发生这种情况,请运行以下命令以完成rebase。

git checkout E -- apk_path
git add apk_path
git rebase --continue