Git 因致命错误而失败。拒绝将不相关的历史与 git push 合并?
Posted
技术标签:
【中文标题】Git 因致命错误而失败。拒绝将不相关的历史与 git push 合并?【英文标题】:Git failed with a fatal error. refusing to merge unrelated histories with 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 仍然会保留错误的用户名。现在每个提交都只是用正确和不正确的用户名加倍。
【问题讨论】:
【参考方案1】:基本技巧:从干净的源中提取,复制更改的文件..
在 gitlab 上,你必须 UNROTECT 你的主分支(在设置→存储库中)
另外,如果你的 git 太旧,--allow-unrelated-histories
可能无法实现,你可以 做 push --force origin master
,但请记住,它甚至可能不会弄乱你的 repo ,还有所有远程客户端可能不得不再次pull --force
或clone
看这里(长时间讨论) 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 --force
或git push --force-with-lease
。您还必须拥有执行此操作的权限,但如果 GitHub 存储库在您的控制之下,则情况已经如此,或者易于设置(您必须告诉 GitHub 禁止什么,所以如果您没有强制禁止自己-push 早一点,你现在不需要改变任何东西)。
请注意,丢弃任何给定的提交必然会丢弃所有后续提交。因此,如果您想保留其他提交,您必须首先将 那些 复制到新的和改进的提交中,其改进是它们附加到您现有的新的和改进的提交中。
【讨论】:
以上是关于Git 因致命错误而失败。拒绝将不相关的历史与 git push 合并?的主要内容,如果未能解决你的问题,请参考以下文章
致命:添加 git remote 后拒绝合并不相关的历史记录
将项目上传到github时如何解决“拒绝合并不相关的历史”?