我不小心最终创建了所有项目提交的副本并推送到远程,我的项目从500个提交跳到1000个。我已经检查了remove duplicate {的所有链接{3}},但这些对我来说都没有意义。如果我尝试重新绑定,我只会在每次单次提交时遇到合并冲突,并且我不会花费几个小时来解决冲突,因为从一开始就是这样。我的历史看起来像:
无论如何只是进入并强行删除重复提交?我真的不想在大约1000次提交之前花费数小时来手动压缩每次重复的提交。
更好的是,有没有办法可以撤消这个?这是filter-branch
命令的结果,我没有意识到每次提交都重复了
答案 0 :(得分:2)
您可以尝试rebasing
,但您说您遇到了问题,或者您可以尝试使用undo
git reflog
。我在下面留下两个选项:
您提到要撤消filter命令的结果,因此您可以尝试运行:
> $ git reflog
d363d7c HEAD@{0}: commit: minor typo
87c9470 HEAD@{1}: pull: Fast-forward
a74a14e HEAD@{2}: checkout: moving from clojure-script-begginer to master
ce79d4e HEAD@{3}: commit: article for review
a74a14e HEAD@{4}: checkout: moving from master to clojure-script-begginer
a74a14e HEAD@{5}: pull: Fast-forward
14ec10b HEAD@{6}: checkout: moving from cors to master
e71cf74 HEAD@{7}: commit: Config URL commented out
如果您看到这样的列表,并且在运行过滤器命令之前您可以注意到一个条目,您可以将分支重置为该点:
> git reset --hard <COMMIT ID>
COMMIT ID
可以是git reflog
不要执行你目前有100次提交的分支中的任何步骤,因为我们将进入相当多的危险区域。
假设你是主人:
> git checkout -b fixing-duplicates
执行命令
> git rebase -i HEAD~1000
将打开文本编辑器(默认编辑器),它将显示之前的所有100次提交。删除重复提交的行,直到您只有所需的提交。保存并退出。
此时我不希望你有反转冲突。
只需将分支向上游推送:
> git push origin fixing-duplicates
让分支看看,看看这是否真的是你想要的。如果是,只需运行:
> git push origin fixing-duplicates:master -f
如果您的GitHub实例阻止强制推送到默认分支,请将默认分支更改为fixing-duplicates
并再次运行该命令。然后只需将默认分支切换回master
。
如果这有帮助,请告诉我。