将主人合并到功能分支
假设我们在git中有以下情况:
创建的存储库:
mkdir GitTest2
cd GitTest2
git init
主人的一些修改发生并得到承诺。
echo "On Master" > file
git commit -a -m "Initial commit"
Feature1分出主,并完成一些工作:
git branch feature1
git checkout feature1
echo "Feature1" > featureFile
git commit -a -m "Commit for feature1"
同时,在主代码中发现了一个错误,并建立了一个修补程序分支
git checkout master
git branch hotfix1
git checkout hotfix1
该错误在修补程序分支中得到解决,并被合并回主服务器(可能在拉请求/代码检查之后):
echo "Bugfix" > bugfixFile
git commit -a -m "Bugfix Commit"
git checkout master
git merge --no-ff hotfix1
feature1的开发仍在继续:
git checkout feature1
现在我的问题:说我需要我的功能分支中的修补程序,也许是因为该错误也发生在那里。 如何在不将提交复制到我的特性分支的情况下实现这一点? 我想阻止在功能分支上获得两个与功能实现无关的新提交。 如果我使用合并请求,这对我来说尤其重要:所有这些提交也将包含在合并请求中,并且必须进行审查,尽管这已经完成(因为修补程序已经在主服务器中)。
我不能做一个git merge master --ff-only
:“致命的:不可能快进,放弃。”,但我不确定这是否对我有帮助。
你应该可以重新绑定你的分支:
git checkout feature1
git rebase master
管理出现的所有冲突。 当你到达提交错误修正(已经在master)时,git会说没有改变,可能它们已经被应用了。 然后,您继续使用rebase(同时跳过master中的提交)
git rebase --skip
如果您在功能分支上执行git log
,您会看到错误修复提交只出现一次,并在主控部分中出现。
有关更详细的讨论,请查看关于git rebase
(https://git-scm.com/docs/git-rebase)的Git book文档,其中涵盖了这个确切的用例。
如何将主分支合并到功能分支中? 简单:
git checkout feature1
git merge master
在这里强制快进合并是没有意义的,因为这是无法完成的。 您同时提交了功能分支和主分支。 快进是不可能的。
看看gitflow。 这是一个可以遵循的git的分支模型,而你在不知不觉中已经做到了。 它也是git的一个扩展,它为新的工作流程步骤添加了一些命令,这些步骤可以自动执行,否则您需要手动执行。
那么你在工作流程中做了什么? 你有两个分支可以使用,你的feature1分支基本上就是gitflow模型中的“develop”分支。
您从主创建了一个修补程序分支并将其合并回来。 现在你被卡住了。
gitflow模型会要求您将修补程序也合并到devel分支,在您的案例中它是“feature1”。
所以真正的答案是:
git checkout feature1
git merge --no-ff hotfix1
这将修补程序内部所做的所有更改添加到功能分支,但只有这些更改。 它们可能会与分支中的其他开发更改发生冲突,但是如果您最终将功能分支合并到主分支,它们不会与主分支发生冲突。
请仔细检查rebasing。 如果您所做的更改保留在您的存储库的本地,则只有重定位,例如,您没有将任何分支推送到某个其他存储库。 在您将本地提交排入世界之前,重新配置是一个很好的工具,可以让您将本地提交安排到一个有用的顺序中,但之后的重新发布会让像您这样的git初学者陷入困境。
基于这篇文章,你应该:
这样你的历史保持清晰,因为你不需要重新合并。 你不需要非常谨慎,因为你不需要git rebase
链接地址: http://www.djcxy.com/p/45057.html