[英]Keeping clean git branches, but not causing conflicts in the meantime
我一直在努力简化团队的git工作流程。 我们的团队使用master
, staging
和development
分支作为构建服务器。
当正在处理新任务/功能时,我们将首先从master创建功能分支,将其向前提交多次,然后使用temp分支将其压缩到1次提交,然后将其移至任一阶段或发展。
考虑以下基本图:
Master
|
Staging
|
Development ——> [F1] ——> [F2]
|
*Temporary* ——> [F2]
|
Feature1 ——> [A ——> B ——> C] = [F1]
|
Feature2 ——> [A ——> B ——> C] = [F2]
在这里,我们看到所有分支的起点。 每个功能的提交被隔离并保持在一起。 当功能部件向上游移动时,功能部件的提交将被压缩,然后合并到上游分支中。 例如,将功能部件移至开发阶段将意味着:
git checkout development; # Switch to Development
git pull --rebase $DEV_REMOTE; # Rebase changes onto development
git checkout $MASTER; # Switch to master branch
git checkout -b $SQUASH; # So that we can clone a squash branch from it
git merge --squash $FEATURE_BRANCH; # Merge in the feature
git commit -m "Testing ($FEATURE_BRANCH)"; # Meaningfully Commit
git rebase $DEV_LOCAL; # Rebase Local Dev onto Feature
git checkout $DEV_LOCAL; # Switch back to Dev
git merge $SQUASH; # Merge on the feature
git branch -D $SQUASH; # Delete Squash Branch
直到我在壁球比赛中遇到第一次冲突之前,这一直很好。 我不确定更改是在哪里进行的,为什么git无法自动使用历史记录来解决它。 这是非常基本的输入/输出交换。
我的问题是:是否有更好的方法可以做到这一点? 我们希望将代码合并到dev / staging中,每个功能分支只需提交1次提交,而在开发测试时不破坏/弄脏功能分支(将未经批准的代码从dev重新部署到Feature分支中将包括那些合并到staging分支中的更改)。
我建议您从master
分支到staging
和development
分支分别挑选合并的提交。
首先假设提交历史如下:
D----E---F feature
/
...---A---B---C master
...---G---H---I development
...---J---K---L staging
使用的命令如下:
git checkout master
git merge feature --squash
git checkout development
git cherry-pick master
git checkout staging
git cherry-pick master
git branch -D feature
然后提交历史会(提交M
是南瓜合并从提交feature
分支,提交M'
是摘樱桃的提交master
分支,提交M''
是从呈交也摘樱桃master
分支):
...---A---B---C---M master
...---G---H---I---M' development
...---J---K---L---M'' staging
这将使您的主要分支机构master
, development
和staging
成为独立的线性结构。
注意:壁球合并时是否存在冲突,取决于您在feature
分支和master
分支上所做的更改。 但是,无论是壁球合并还是樱桃拣选,都可以使用-X
选项自动解决冲突。 -X ours
将通过将版本保留为当前分支来解决冲突文件。 -X theirs
将通过保持版本为另一端来解决冲突文件。
此外,如果需要记录三个主要分支之间的关系,则可以将它们合并在一起:将feature
合并到master
->将master
合并到development
->将development
合并到staging
分支中->删除feature
分支。 那么提交历史将是:
...---A---B---C---M master
\
...---G---H---I---M' development
\
...---J---K---L---M'' staging
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.