在我的本地,我制作了新的文本文件 - > git add newfile.txt - > commit - > pull origin master - > ERROR!
"拒绝合并不相关的历史".
什么是不相关的历史?什么是相关历史?
Yas*_*ahi 78
我认为你已经在远程存储库中提交,当你拉出这个错误发生时.
使用此命令
git pull origin master --allow-unrelated-histories
git merge origin origin/master
Run Code Online (Sandbox Code Playgroud)
Bri*_* C. 41
我遇到了类似的问题,我从第二个远程引入了一个分支,并想与第一个远程的分支合并。这与现有的答案不同,因为我没有在拉取时使用 --allow-unrelated-histories ,而是在合并时使用。
git fetch origin master
git checkout master
git merge --allow-unrelated-histories myfunnybranch
Run Code Online (Sandbox Code Playgroud)
这会获取并检查 master 分支并将 myfunnybranch 合并到其中。通过使用git fetch
而不是git pull
我们区分将代码带到我们的机器和执行困难的合并。
警告:“不相关的历史记录”是指无法追溯到共同来源的历史记录。换句话说,myfunnybranch
和master
源自两个完全不同的存储库。
如果两个存储库非常相似或有很多共同文件,则很有可能其中一个存储库在某个地方丢失了其历史记录。无论情况是否如此,最好避免两个历史记录导致同一组文件。相反,您希望保留较长的历史记录,并通过一次提交引入来自其他存储库的任何更改。为了实现这一目标,请签出具有较长历史记录的存储库,并将另一个存储库的文件复制到其中,这应该会产生一个带有少量更改的小型提交,并且git status
会git diff
在您使用 进行提交之前为您总结git commit
。有关更多详细信息,请参阅另一个问题的答案,该问题在对此问题的另一个答案的评论中提到。
在OP的情况下(在对问题的编辑中详细说明),可能不需要不相关的合并。也许 OP 没有克隆存储库,或者可能是其他人在 OP 进行初始提交之前推送到空存储库。无论哪种方式,由于 OP 仅编辑单个文件,因此最好简单地克隆新的存储库,将新文件复制到克隆的存储库中,然后添加、提交和推送到那里。
如果两个存储库确实没有什么共同点,您只想合并不相关的历史记录。例如,每个存储库在合并期间贡献一组不同的文件。
就我而言,我想合并两个完全不同的存储库,它们的文件位于不同的目录中,并且我想保留这两个存储库的历史记录。我认为这些代码应该放在一个存储库中,但最初是在两个不同的存储库中编写的。
虽然OP似乎在这里添加了一个新文件,但这可能不是我们需要多个历史记录的情况。
正如P. Ent 在评论中指出的那样,合并不相关历史有意义的一种情况是,当您在本地进行了相当多的开发,并且在 origin/main 上确实没有太多开发时。如果基本上所有开发都是在本地完成的myfunnybranch
,那么运行甚至可能是有意义的
git checkout myfunnybranch
git merge -s ours --allow-unrelated-histories main
Run Code Online (Sandbox Code Playgroud)
这会忽略主分支上的所有工作,但将其保留在历史记录中。myfunnybranch
仅保留中的代码。现在myfunnybranch
重新合并main
应该很容易。
在这种情况下,git log --all --graph
在推送任何内容之前查看本地存储库的样子很有用。
例如,在git merge -s ours
执行上面建议的命令之后,您可能会发现您的存储库看起来像
git log --all --oneline --graph
* 6c8188b (HEAD -> myfunnybranch) Merge branch 'main' into myfunnybranch
|\
| * b93aabd (origin/main, origin/HEAD, main) Initial commit on remote server
* f69e99b some work I did locally
* df5d8ae more local work
* da455d6 Initial commit that I made locally
Run Code Online (Sandbox Code Playgroud)
在这种情况下你可以使用
git diff 6c8188b f69e99b
Run Code Online (Sandbox Code Playgroud)
确认您最近的提交 6c8188b 确实没有更改您在本地所做的任何工作。如果没有更改,它将不会打印任何内容。
然后,将 myfunnybranch 合并回 main 也会导致 main 匹配您的本地开发。这是因为从主分支的角度来看,提交 6c8188b 进行了大量编辑,使该分支与另一个分支完全一致。
当本地.git
子目录丢失时,整个项目似乎从无处出现,因为所有本地更改历史记录都包含在中.git
。因此,您的本地更改变得无关紧要。这就是为什么所有更改都被调用的原因unrelated histories
。
在这种情况下,git merge or pull
请求将无法跟踪您对要添加到远程项目的更改所做的更改。因此," refusing to merge unrelated histories"
发生-错误。
在这种情况下,如果您尝试通过以下命令强制合并,
git pull origin master --allow-unrelated-histories
git merge origin origin/master
由于找不到本地更改的历史记录,因此会产生很多冲突。
归档时间: |
|
查看次数: |
47850 次 |
最近记录: |