试图变革会产生无休止的合并冲突

时间:2015-07-07 13:46:45

标签: git github version-control merge

我不小心最终创建了所有项目提交的副本并推送到远程,我的项目从500个提交跳到1000个。我已经检查了remove duplicate {的所有链接{3}},但这些对我来说都没有意义。如果我尝试重新绑定,我只会在每次单次提交时遇到合并冲突,并且我不会花费几个小时来解决冲突,因为从一开始就是这样。我的历史看起来像:

enter image description here

无论如何只是进入并强行删除重复提交?我真的不想在大约1000次提交之前花费数小时来手动压缩每次重复的提交。

更好的是,有没有办法可以撤消这个?这是filter-branch命令的结果,我没有意识到每次提交都重复了

1 个答案:

答案 0 :(得分:2)

您可以尝试rebasing,但您说您遇到了问题,或者您可以尝试使用undo git reflog。我在下面留下两个选项:

使用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

的第一列上的任意数字

衍合

1。创建另一个分支

不要执行你目前有100次提交的分支中的任何步骤,因为我们将进入相当多的危险区域。

假设你是主人:

> git checkout -b fixing-duplicates

2.交互式rebase删除重复项

执行命令

> git rebase -i HEAD~1000

将打开文本编辑器(默认编辑器),它将显示之前的所有100次提交。删除重复提交的行,直到您只有所需的提交。保存并退出。

此时我不希望你有反转冲突。

3。推分支

只需将分支向上游推送:

> git push origin fixing-duplicates

4。检查分支是否正常

让分支看看,看看这是否真的是你想要的。如果是,只需运行:

> git push origin fixing-duplicates:master -f

如果您的GitHub实例阻止强制推送到默认分支,请将默认分支更改为fixing-duplicates并再次运行该命令。然后只需将默认分支切换回master

如果这有帮助,请告诉我。