【问题标题】:Attempting to rebase gives endless merge conflicts尝试变基会导致无休止的合并冲突
【发布时间】:2015-09-25 01:09:06
【问题描述】:

我不小心创建了所有项目提交的副本并推送到远程,我的项目从 500 个提交跃升至 1000 个。我检查了所有指向 remove duplicate commits 的链接,但没有一个这些对我来说很有意义。如果我尝试变基,我只会得到一个合并冲突 every single commit ,而且我不会从一开始就花几个小时来解决冲突。我的历史是这样的:

有没有办法直接进入并强制删除重复的提交?我真的不想花几个小时从大约 1000 次提交中手动压缩每个重复提交。

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

【问题讨论】:

    标签: git github version-control merge


    【解决方案1】:

    你可以试试rebasing,但你说你有问题,或者你可以试试undogit 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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-24
      • 2015-04-11
      • 2020-08-23
      相关资源
      最近更新 更多