不知何故,我的主分支和我的起源/主分支分道扬镳了。 我不希望它们发散。
我如何看待这些差异并将其合并?
不知何故,我的主分支和我的起源/主分支分道扬镳了。 我不希望它们发散。
我如何看待这些差异并将其合并?
当前回答
在我的情况下,我已经将更改推到origin/master,然后意识到我不应该这样做:-(这是复杂的事实,局部更改是在子树中。所以我回到了“坏的”本地更改之前的最后一个好的提交(使用SourceTree),然后我得到了“分歧消息”。
在本地修复了我的混乱之后(细节在这里不重要),我想“回到”远程源/主分支,这样它就会再次与本地主同步。我的解决方案是:
git push origin master -f
注意-f (force)开关。这删除了错误地推送到origin/master的“坏更改”,现在本地和远程分支是同步的。
请记住,这是一个潜在的破坏性操作,因此只有在您100%确定及时“移回”远程主机是OK的情况下才执行该操作。
其他回答
你可能会遇到这种情况,只需要从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。
在我的例子中,这里是我所做的导致分歧的消息:我做了git push,但后来做了git commit——amend,以向commit消息中添加一些东西。然后我又做了另一次提交。
所以在我的例子中,这仅仅意味着原点/主节点已经过时了。因为我知道没有其他人在触摸原点/master,修复是微不足道的:git push -f(其中-f表示力)
我已经通过移动到commit_sha来修复它,最后提交给origin/master。
git reset --hard commit_sha
警告:在commit 'commit_sha' commit之后,你将丢失所有提交的内容。
我相信这应该对我有帮助:
git reset --hard origin/master
但事实并非如此。不知怎的,我得到了同样的消息&当我从远程分支中提取更改时,冲突就发生了。因为我确定我根本不需要我现有的本地分支&我只需要一个远程主分支的副本,因此我想出了这个解决方案:
签出到一个新的分支,例如,git Checkout -b placeholder-branch。注意:该分支可以稍后删除。 git分支-D master,我这样做是因为我确定我的本地分支被搞砸了&我不需要这个。我需要远程实例的新副本。 Git签出-跟踪原点/master &你完成了;现在你可以使用git branch -D删除占位符分支
在我的情况下,我已经将更改推到origin/master,然后意识到我不应该这样做:-(这是复杂的事实,局部更改是在子树中。所以我回到了“坏的”本地更改之前的最后一个好的提交(使用SourceTree),然后我得到了“分歧消息”。
在本地修复了我的混乱之后(细节在这里不重要),我想“回到”远程源/主分支,这样它就会再次与本地主同步。我的解决方案是:
git push origin master -f
注意-f (force)开关。这删除了错误地推送到origin/master的“坏更改”,现在本地和远程分支是同步的。
请记住,这是一个潜在的破坏性操作,因此只有在您100%确定及时“移回”远程主机是OK的情况下才执行该操作。