你可以试试rebasing,但你说你有问题,或者你可以试试undo和git reflog。我将这两个选项都保留在下面:
使用 Git Reflog 撤消
您提到要撤消过滤命令的结果,因此您可以尝试运行:
> $ 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 第一列中的任意数字
变基
1。创建另一个分支
不要在您当前有 100 次提交的分支中执行任何步骤,因为我们将在相当长的一段时间内进入危险区域。
假设你是大师:
> git checkout -b fixing-duplicates
2. 交互式变基以删除重复项
运行:
> git rebase -i HEAD~1000
将打开一个文本编辑器(默认),它会显示所有之前的 100 次提交。删除重复提交的行,直到您只有所需的提交。保存并退出。
在这一点上,我不希望你有 rebase 冲突。
3。推送分支
只需将分支推送到上游:
> git push origin fixing-duplicates
4。检查分支是否正常
看看这个分支,看看这是否真的是你想要的。如果是,请运行:
> git push origin fixing-duplicates:master -f
如果您的 GitHub 实例阻止强制推送到默认分支,请将默认分支更改为 fixing-duplicates 并再次运行该命令。然后只需将默认分支切换回master。
如果这有帮助,请告诉我。