git释放分支关闭程序以验证而无需合并



您如何确保释放分支上的所有更改也都存在于主线分支(在这种情况下为主)?

理想情况下,我们所有人都有连续的部署,不需要释放分支。如果我们确实需要它们,我们需要知道如何检查对发布分支的所有必需更改是否会返回主线(在这种情况下为MASTER)。

当我们创建发行分支时,我们:

  • 创建发布分支git checkout master -b release/0.0
  • 注意原点点git log -n 1
  • 更改Master和cherry-pick -x
  • 一些问题需要PR或直接更改版本分支
  • 我们可能不希望将所有这些更改合并回Master Branch

最后,我们进行了一些更改,可以将他们的出处追溯到主人,而有些则没有。给出,我们可能不希望整个集合回到主机上,Merge不是一个选项。

我们需要一种让团队审查更改的方法,以确保我们对主人进行所有需要的更改。特别是如果我们在发行分支的Bugox或Hotfix分支。

如果我们使用diff或运行测试合并,我们会在发行分支上看到所有流失,并可能会在下一个版本中对主机进行更改,如果我们处于并发开发模式。

减少噪音并关注需要樱桃挑选回主的实际变化的方法是:

  • 从发行分支原始 git checkout <release-branch-origin-commit-id> -b squash-release-0.0创建一个壁球分支
  • 挤压发行分支上的所有更改纳入单个提交git merge --squash release/0.0
  • 将这些更改作为一个单一提交
  • 从主git checkout master -b closout-release-0.0创建一个关闭验证分支
  • 樱桃挑选更改而没有提交git cherry-pick --no-commit <squashbranch single commit sha>
  • 审查差异和冲突

当我们这样做时,我们会发现任何来回恢复的方法都会平滑,并且差异/冲突是少数文件。我们仍然必须查找文件并检查注释以确定正确的操作过程,但我们这样做的范围要小得多。

如果您确实需要使用长时间的释放分支或维护分支,则如何确保应该传播的更改和将来的版本?

最好的选择似乎是 - 完全避免樱桃摘下分支。如果这不可能,那么南瓜方法似乎可以很好地工作

repo=$1
relBranch=$2
branchStart=$3
workDir=${repo}-closeout-`date +"%Y-%m-%d"`
git clone .../${repo}.git ${workDir}
pushd ${workDir}
# update release branch
git checkout ${relBranch}; git pull
# create branch from branch start
git checkout ${branchStart} -b squash/${relBranch}
# Squash Merge branch history into single commit
git clean -d -f -x .
git merge --squash ${relBranch}
# check that status reports only staged changes
git commit -m "release/0.9 squash ${branchStart}..HEAD"
squashedCommit=`git log --format="%H" -n 1`
# Prepare master
git checkout master; git pull
# create staging branch for delta check
git checkout -b deltacheck/${relBranch}
git clean -d -f -x .
# check release branch history delta
git cherry-pick --no-commit ${squashedCommit}
git status
# Diff 
git diff
popd

最新更新