在git merge之后同步2个分支

时间:2016-10-06 10:10:25

标签: git git-merge

如何让2个Git分支保持同步?

我目前有一个master分支和一个gh-pages分支以及相应的遥控器。每当我提交时,mastergh-pages分支都共享相同的提交ID,如下所示:

git checkout master
git commit -am "message"
git checkout gh-pages
git merge master

我的日志看起来像是这样(用git log --graph --oneline --all --decorate实现):

single-tracked-graph

在我解决的合并冲突之后,每个合并都会收到自己的提交:

double-tracked-graph

我的问题是,我如何对齐2个分支,以便合并将像以前在单个'图形轨道上一样发生?

我已根据this answer尝试pull,但无济于事。

1 个答案:

答案 0 :(得分:1)

看起来提交50b6dec已添加到gh-pages分支,并且提交e43c01f同时在master上进行,这就是导致合并的原因冲突。

因此,gh-pages有一个master没有的提交。因此,只要你在那之后合并,Git就无法进行快进合并。 (快进合并是给你以前的线性历史。)因此,解决方案是:

git checkout master
git merge gh-pages

为了防止将来再次发生这种情况,请将您的流程更改为:

git checkout master
git commit -am "message"
git checkout gh-pages
git merge --ff-only master

如果--ff-onlygh-pages提交的任何提交,master标记将中止合并,并显示错误。

如果您想重写历史记录,以便就好像从未发生过那样,那么您也可以这样做。

首先,确保您在master

git checkout master

现在改变:

git rebase 50b6dec

你必须再次解决这个冲突。完成后,执行:

git rebase --continue

当rebase完成后,您必须强制更新origin

git push --force-with-lease origin master

您还必须移动gh-pages分支。做:

git branch -f gh-pages master
git push --force-with-lease origin gh-pages

这将为您提供如下所示的历史记录:

* f218f70' (HEAD -> master) Added Scatterplot functionality to check ratings
* cb79b79' Squashed bug
* fcf0d8a' Small change
* e43c01f' Small change
* 50b6dec Small change
* a217267 Small change

强制性警告:由于rebase会重写历史记录,因此对于在此分支上工作的其他人来说,这可能会造成危险/破坏。请务必清楚地告知您与正在合作的任何人所做的事情。