繁体   English   中英

保持干净的git分支,但同时不引起冲突

[英]Keeping clean git branches, but not causing conflicts in the meantime

我一直在努力简化团队的git工作流程。 我们的团队使用masterstagingdevelopment分支作为构建服务器。

当正在处理新任务/功能时,我们将首先从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分支到stagingdevelopment分支分别挑选合并的提交。

首先假设提交历史如下:

        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

这将使您的主要分支机构masterdevelopmentstaging成为独立的线性结构。

注意:壁球合并时是否存在冲突,取决于您在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM