不知何故,我的主分支和我的起源/主分支分道扬镳了。 我不希望它们发散。

我如何看待这些差异并将其合并?


当前回答

在我的例子中,这里是我所做的导致分歧的消息:我做了git push,但后来做了git commit——amend,以向commit消息中添加一些东西。然后我又做了另一次提交。

所以在我的例子中,这仅仅意味着原点/主节点已经过时了。因为我知道没有其他人在触摸原点/master,修复是微不足道的:git push -f(其中-f表示力)

其他回答

你可能会遇到这种情况,只需要从remote中获取1个历史记录:

$ git pull --depth=1
fatal: refusing to merge unrelated histories
$ git status
Your branch and 'origin/main' have diverged,
and have 1 and 1 different commits each, respectively.

根据上面的回答,会导致两个分支分流到不同的“线”,所以Git认为这是不相关的历史。

---a---b---main
        \      \
          x x x x   diverged, cannot be merged anymore
          \      \
    ---?---?---?---c(origin/main)

最后,简单的解决方案是:git重置-硬的origin/main,如果你不关心本地的变化,否则你将失去所有的工作。

或者尝试git pull——depth=2。

在我的情况下,我已经将更改推到origin/master,然后意识到我不应该这样做:-(这是复杂的事实,局部更改是在子树中。所以我回到了“坏的”本地更改之前的最后一个好的提交(使用SourceTree),然后我得到了“分歧消息”。

在本地修复了我的混乱之后(细节在这里不重要),我想“回到”远程源/主分支,这样它就会再次与本地主同步。我的解决方案是:

git push origin master -f

注意-f (force)开关。这删除了错误地推送到origin/master的“坏更改”,现在本地和远程分支是同步的。

请记住,这是一个潜在的破坏性操作,因此只有在您100%确定及时“移回”远程主机是OK的情况下才执行该操作。

我已经通过移动到commit_sha来修复它,最后提交给origin/master。

git reset --hard commit_sha

警告:在commit 'commit_sha' commit之后,你将丢失所有提交的内容。

将123替换为分支偏离原点的提交数。

git reset HEAD~123 && git reset && git checkout . && git clean -fd && git pull

以我为例,这是因为我没有解决冲突。

该问题是由运行git pull命令引起的。原产地的变化导致与我的本地回购发生冲突,我解决了这个问题。然而,我并没有犯下这些罪行。此时的解决方案是提交更改(git提交已解析的文件)

如果在解决冲突后还修改了一些文件,git status命令将把本地修改显示为非分段本地修改,并将合并解析显示为分段本地修改。这个问题可以通过git commit从merge中提交更改来解决,然后像往常一样添加并提交未分阶段的更改(例如通过git commit -a)。