Git失败,出现致命错误,拒绝将无关历史与Git推送合并

u91tlkcl  于 2022-10-23  发布在  Git
关注(0)|答案(3)|浏览(194)

我在本地做了一些更改,我正试图将其推送到GitHub。我读过我可以使用--allow-unrelated-histories,但我只看到了演示如何为pull执行此操作的示例,这不是我所需要的。我需要将本地目录设置为master
我尝试了以下命令:
git push origin master --allow-unrelated-histories
但它没有起作用。我收到一条消息说这是一个未知的选择。
我通常使用Visual Studio。我在那里犯了个错误,当涉及到Bash时,我对Git一点也不流利。我Git用gitignore文件等攻击我的文件夹,并尝试进行更改。如果可能的话,我更愿意在VisualStudio中执行此操作,但我也不知道如何修改VisualStudio中的选项。
显然,我想做的事情实际上是行不通的。我发现pull命令“有点”符合我的预期,但不是真的。我尝试更改所有提交的用户名,但没有成功,因为GitHub仍然会保留错误的用户名。现在,每次提交都只需使用正确和错误的用户名。

nmpmafwu

nmpmafwu1#

基本提示:从干净的源中提取,复制更改的文件等。
GitLab中,您必须取消保护您的主分支(在设置中存储库
此外,如果您的Git太旧,则可能无法实现--allow-unrelated-histories。您可以执行push --force origin master,但请记住,它可能会弄乱甚至您的存储库。此外,所有远程客户端可能必须再次使用pull --forceclone
请参见(详细讨论)Git refusing to merge unrelated histories on rebase

5jvtdoz2

5jvtdoz22#

--allow-unrelated-histories标志仅适用于合并。由于git push不合并(ever),因此它没有--allow-unrelated-histories选项。(与git pull命令相比,git merge有时运行得很好,而且经常运行。)
我尝试更改所有提交的用户名。。。
您不能更改任何现有提交的任何内容。所有提交都是100%只读的。
你可以做的是接受一系列你不喜欢的提交,比如作者和/或提交人的姓名和/或电子邮件地址,然后将它们复制到新的和改进的提交中,这些提交在其他方面都是相同的,但是要纠正这个问题。看来这一定是你所做的,因为:
…[在]pull命令之后…每次提交都只需使用正确和不正确的用户名加倍。
当然,这种加倍正是您在进行更正提交时所做的。您告诉yourGit放弃旧的(不正确的)提交,转而使用新的改进的提交,它做到了。但是,GitHub上的另一个Git存储库仍然存在错误的提交。然后,您告诉Git获取它们拥有的任何提交(在本例中是您刚刚丢弃的提交),然后将它们与它们没有的提交连接起来,在本例中将是您的新的和改进的替换。
您必须放弃加入合并,通常通过git reset。这会让您回到用新的和改进的副本替换旧的和不正确的提交的情况-例如。,回到运行git pull之前的位置。现在你回到了原来的位置:你仍然需要说服Git在GitHub上放弃旧的和不正确的提交,转而使用新的和改进的提交。
要做到这一点,你必须使用git push --forcegit push --force-with-lease。你还必须有权限这样做,尽管如果GitHub存储库在你的控制之下,这已经是事实了,或者很容易设置(你必须告诉GitHup禁止什么,所以如果你之前没有禁止自己强制推送,你现在就不需要改变任何东西)。
请注意,丢弃任何给定的提交必然会丢弃所有后续提交。因此,如果您想保留其他提交,您必须首先将这些*复制到新的和改进的提交中,其改进之处在于它们会附加到现有的新的和改善的提交中。

iqxoj9l9

iqxoj9l93#

如果您不太关心保存提交历史,可以:
git reset --soft <commit before it all went to hell>
git status(检查您想要的一切是否都已完成)
git commit -m “<commit message>“以上
git log(查看提交历史并确保它是您想要的)
git push -f
这将保留您对本地所做的更改,同时允许您用刚刚修改的历史记录覆盖远程。

相关问题