问题:来自已删除集成分支的提交存在于功能分支中。它们需要被删除或恢复。
详细解决方案:将来,请按如下方式更改您的工作流程。
- 不要将集成分支合并到功能分支中。
git pull origin develop
- 将master合并到功能分支中。
git pull origin master
- 将功能分支合并到名为develop的集成分支中。
git checkout develop && git merge my-feature
细节
ff-only 选项可确保开发人员仅获得可快速转发的更改,并且他们的功能不会受到开发分支中的瞬态突变的污染。
开发人员应该feature-that-works
从master
.
在工作开始时:
git pull
git checkout master
git checkout -b feature-that-works
现在我有一个名为的新分支feature-that-works
,我准备开始编写我的功能。
如果我将集成分支develop
直接拉到我的feature-that-works
分支中会发生什么?我的功能分支被合并到集成分支中的所有其他正在进行的工作所污染。我无法控制其他正在进行的工作,一般来说,我不希望它污染我干净的功能分支。这就是为什么我不从名为的集成分支中提取develop
到我的feature-that-works
.
及时了解变化
将 master 拉到功能分支中不是问题。有时在我的持续部署项目中,我每天从 master 获取几次。这可以!
git checkout feature-that-works
git pull --ff-only origin master
如果有冲突,上面带有 --ff-only 选项的命令将失败。
发生冲突时该怎么办
下一个命令在 feature-that-works 下 rebase master。
git pull -r origin master
当该ff-only
选项因冲突而失败时,我必须将我的分支重新置于主人之上。另一种说法是我需要在我的功能分支下重新设置 master 。这确保了主分支总是可以快进。
通过在我的本地特性分支中重新定位,可以将我的特性分支中的提交历史重播到主分支上,而不会出现任何合并冲突。我正在本地解决所有冲突,而不是等到将我的更改应用到主分支上。如果有问题,希望它是一个小问题,我可以在本地解决,而不是等待并让它成为下游其他人更头痛的问题。
这是另一个很好的解释,用简单的视觉描述为什么ff-only
首选 git merge。
一个有趣的事实:如果没有该ff-only
选项,该git pull
命令实际上与git fetch
+相同git merge
。
一体化
我将 a 合并feature-that-works
到develop
. 正如我之前提到的,它不能反过来工作。
git push origin feature-that-works
git fetch
git checkout develop
git reset --hard origin/develop
git pull origin feature-that-works
git push origin develop
我使用的原因git reset --hard origin/develop
是因为开发分支是可变的。开发可以由其他人强制推动。我想确保我的本地开发分支与远程上游分支 origin/develop 匹配。
仅此而已。请记住,即使有良好的工作流程,开发人员也需要沟通,并且有时可能必须与其他开发人员一起解决合并冲突。