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

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


当前回答

当我基于分支a创建一个分支时遇到了这个问题

git checkout -b a

然后我将分支a的起始流设置为分支B的原点

git branch -u origin/B

然后我得到了上面的错误消息。

对我来说,解决这个问题的一个方法是,

删除分支a 创建一个新的分支b

git checkout -b b origin/B

其他回答

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

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

git push origin master -f

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

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

我知道这里有很多答案,但我认为git reset -soft HEAD~1值得注意,因为它让你在解决发散状态时,在最后一次本地(未推送)提交中保留更改。我认为这是一个比使用rebase的pull更通用的解决方案,因为本地提交可以被审查,甚至可以移动到另一个分支。

关键是使用——柔和,而不是严厉——强硬。如果提交次数超过1次,则更改HEAD~x应该可以工作。这里是解决我的情况的所有步骤(我有1个本地提交和8个远程提交):

1) git reset—soft HEAD~1来撤销本地提交。对于接下来的步骤,我使用了SourceTree中的接口,但我认为以下命令也可以工作:

2) git从1)到stash的变化。现在所有的变化都是安全的,不再有分歧。

3) git拉取远程更改。

4) git stash pop或git stash apply应用上次存储的更改,如果需要,随后是一个新的提交。当想要丢弃本地提交中的更改时,这一步是可选的,还有2)。另外,当想要提交到另一个分支时,这一步应该在切换到所需的分支后完成。

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

git reset --hard commit_sha

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

git pull --rebase origin/master 

是一个在大多数情况下可以帮助您的命令。

编辑:从源/主节点中提取提交,并将您的更改应用于新提取的分支历史记录。

当我试图编辑上次提交消息时,我有相同的消息,已经推送提交,使用:git commit——modify -m "新消息" 当我使用git push——force-with-lease repo_name branch_name推送更改时 没有问题。