Git问题总结
分支分叉问题
执行 git status 或者 git push 时出现了以下错误:
On branch master
Your branch and 'origin/master' have diverged,
and have 1 and 2 different commits each, respectively.
(use "git pull" to merge the remote branch into yours)
nothing to commit, working tree clean
问题原因
我在两台电脑上工作,电脑 A 和 B 初始都是 up-to-date,之后我先在 A 中 commit 并 push 了几次,然后我现在在电脑 B 中从初始状态编写,然后试图在 commit 之后 push,出现了上述问题(使用同一个本地和云分支)。
问题分析
假设,远程上的 commit 是 A -> B ,你在 A 电脑上 commit 和 push 之后,远程变成了 A -> B -> C -> D 。现在,B 电脑上还是 A -> B 。然后你 commit 了,那么 B 电脑上就是 A -> B -> E 。
因为 A -> B -> C -> D 和 A -> B -> E 有一个共同的祖先 B ,你在本地多了一个 commit E ,远程多了两个 commits C 和 D 。这个时候如果你要在 A -> B -> E 的 branch 上 push ,git 猜不出到底想保留 C 和 D ,还是只要 E ,还是都要,就会出现上面的提示。
所以,你需要的是把 B 电脑上的历史线变成 A -> B -> C -> D -> E
问题解决
执行命令
git pull --rebase origin master
这个命令等同于:
git fetch origin
git rebase origin/master
执行之后,B 电脑上的历史线就会变成 A -> B -> C -> D -> E ,然后你就可以 push 了
git push origin master
致命:拒绝合并不相关的历史记录
今天拉取代码后,准备合并代码,现了下面的这个错误
$ git merge origin master
fatal: refusing to merge unrelated histories
这里的问题,你可能会在 git pull 或者 git push 中都有可能会遇到。
问题原因
因为两个库没有历史联系, git 默认拒绝合并无关的历史,所以出现这个问题
这是因为两个分支是两个不同的版本,具有不同的提交历史。
问题解决
在你操作命令后面加 --allow-unrelated-histories ,允许不相关历史提交,强制合并
git merge master --allow-unrelated-histories
如果你是 git pull 或者 git push 报 fatal: refusing to merge unrelated histories ,同理
git pull origin master --allow-unrelated-histories
这里推荐使用 git rebase origin/master 来解决这个问题
|