【问题标题】:Git failed with a fatal error. refusing to merge unrelated histories with git push?Git 因致命错误而失败。拒绝将不相关的历史与 git push 合并?
【发布时间】:2020-10-03 20:53:56
【问题描述】:

我在本地进行了一些更改,我正在尝试将其推送到 github。我读过我可以使用--allow-unrelated-histories,但只看到了演示如何为拉动执行此操作的示例,这不是我需要的。我需要让我的本地目录成为主目录。

我尝试了以下命令: git push origin master --allow-unrelated-histories

但它不起作用,我收到一条消息说这是一个未知选项。

我通常与 Visual Studio 合作。我在那里遇到了错误,当谈到 bash 时,我对 git 一点也不流利。我用 gitignore 文件等 git 猛击我的文件夹,并尝试进行更改。如果可能的话,我更愿意从 Visual Studio 执行此操作,但我也不知道如何从 Visual Studio 修改选项。

编辑:显然我想做的实际上并不可行。我发现 pull 命令做了我所期望的“有点”,但不是真的。我尝试更改所有提交的用户名,但没有白费,因为 github 仍然会保留错误的用户名。现在每个提交都只是用正确和不正确的用户名加倍。

【问题讨论】:

    标签: git github git-bash


    【解决方案1】:

    基本技巧:从干净的源中提取,复制更改的文件..

    在 gitlab 上,你必须 UNROTECT 你的主分支(在设置→存储库中)

    另外,如果你的 git 太旧,--allow-unrelated-histories 可能无法实现,你可以push --force origin master,但请记住,它甚至可能不会弄乱你的 repo ,还有所有远程客户端可能不得不再次pull --forceclone

    看这里(长时间讨论) Git refusing to merge unrelated histories on rebase

    【讨论】:

      【解决方案2】:

      您是否非常关心保留您的提交历史记录?

      如果没有,你可以

      git reset --soft <commit before it all went to hell>

      git status(检查您想要的一切是否已上演)

      git commit -m “<commit message>“

      git log(查看提交历史并确保它是你想要的)

      git push -f

      这将保留您对本地所做的更改,同时允许您使用刚刚修改的历史记录覆盖远程。

      【讨论】:

        【解决方案3】:

        --allow-unrelated-histories 标志仅适用于合并。由于git push 不会合并(永远),它没有--allow-unrelated-histories 选项。 (将此与 git pull 命令进行对比,该命令确实有时——嗯,经常,真的——运行git merge。)

        我尝试更改所有提交的用户名...

        您不能更改任何现有提交的任何内容。所有提交都是 100% 只读的。

        可以做的是进行一系列提交,其中包含一些您不喜欢的内容——例如作者和/或提交者的姓名和/或电子邮件地址——以及将它们复制到新的和改进的提交中,否则它们是相同的,但已更正了此问题。看来这一定是你所做的,因为:

        ... [在] pull 命令之后...每次提交都简单地用正确和不正确的用户名加倍。

        当然,这种加倍正是您在进行更正提交时所做的。你告诉 你的 Git 放弃旧的(不正确的)提交,转而支持新的改进提交,它确实做到了。但是另一个 Git 存储库——GitHub 上的那个——仍然有,并且有,不正确的提交。然后,您告诉您的 Git 获取他们拥有的任何提交,而您没有 - 在这种情况下是您刚刚丢弃的提交 - 然后将它们与您拥有但他们没有的提交结合起来,在这个案例是您新的和改进的替代品。

        您必须放弃加入合并,通常通过git reset。这会让你回到用新的和改进的副本替换旧的和不正确的提交的情况——即,回到你运行git pull 之前的位置。您现在又回到了原来的位置:您仍然需要说服 GitHub 上的 Git 放弃 旧的和不正确的提交,转而支持新的和改进的提交。

        为此,您必须使用git push --forcegit push --force-with-lease。您还必须拥有执行此操作的权限,但如果 GitHub 存储库在您的控制之下,则情况已经如此,或者易于设置(您必须告诉 GitHub 禁止什么,所以如果您没有强制禁止自己-push 早一点,你现在不需要改变任何东西)。

        请注意,丢弃任何给定的提交必然会丢弃所有后续提交。因此,如果您想保留其他提交,您必须首先将 那些 复制到新的和改进的提交中,其改进是它们附加到您现有的新的和改进的提交中。

        【讨论】:

          猜你喜欢
          • 2017-09-02
          • 2017-01-09
          • 2017-02-23
          • 2018-10-11
          • 2017-12-29
          • 2018-11-06
          • 2016-10-22
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多