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

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


当前回答

在我的情况下,我得到这个消息时,我按X。1从分支B提交到它的远程跟踪分支remote_B。然后在我的本地存储库,我做了更改,并将其修改为相同的提交ie。X ver.2。

现在我们在远程repo上提交xver1,并提交xver。2在本地。 然后git会警告你

您的本地分支和remote_分别有1个和1个不同的提交

要解决这个问题,你有两个选择:

1.从远程跟踪分支提取变更。

git reset --hard HEAD
git checkout --track remoteRepoName/branch_name 

2.强制将修改后的提交推到远程回购。 (仅建议在推X ver1提交后远程回购没有被任何人拉)

git push -f remote_repo_name remote_branch_name

其他回答

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

git checkout -b a

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

git branch -u origin/B

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

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

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

git checkout -b b origin/B

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

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

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

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

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

我更喜欢更方便、更安全的方式。

# copying your commit(s) to separate branch
git checkout <last_sync_commit>
git checkout -b temp
git cherry-pick <last_local_commit>

git checkout master
git reset --soft HEAD~1 # or how many commits you have only on local machine
git stash               # safer, can be avoided using hard resetting on the above line
git pull
git cherry-pick <last_local_commit>

# deleting temporary branch
git branch -D temp

当我试图重设跟踪远程分支的分支的基础时,我发现自己处于这种情况,我试图在master上重设它。在这种情况下,如果您尝试重新建立基础,您很可能会发现您的分支分散了,它可能会造成一个混乱,这不是git nubees!

假设您在my_remote_tracking_branch分支上,这个分支是从master分支出来的

$ git状态 在分支my_remote_tracking_branch上 没有要提交的内容(工作目录清洁)

现在你正试图从主为:

吉特校长

现在就停下来,给自己省点麻烦!相反,使用merge as:

Git 合并大师

是的,您最终会在分支上获得额外的提交。但除非你想要“不发散”的分支,否则这将是一个比重基更流畅的工作流程。有关更详细的解释,请参阅这个博客。

另一方面,如果你的分支只是一个本地分支(即还没有推送到任何远程),你一定要做一个rebase(你的分支在这种情况下不会发散)。

现在,如果你正在阅读这篇文章,因为你已经处于由于这种重基而导致的“发散”场景中,你可以通过使用以下命令回到上一次提交(即在未发散的状态下):

Git重置——hard origin/my_remote_tracking_branch