首页 > 解决方案 > 如何创建使一个分支与另一个分支相同的提交?

问题描述

假设我有两个分支:masterdeploy. 该master分支是当前的“边缘”代码 - 功能和错误修复分支合并到master. deploy另一方面,分支是我的 CI 系统监视以触发自动部署的内容。正常的工作流程是,一旦代码在 上被认为是“好的” master,它就会被合并,deploy从而导致自动部署。

deploy在测试 CI 环境时,我对分支做了一堆测试提交。提交只是为了更改而进行更改,只是为了测试 CI 触发器。现在可能有 12 个左右的提交只是简单地进行愚蠢的随机(但在部署中可检测到)更改。现在 CI 正在工作,我想将分支“回滚”deploy到当前的master.

问题是我没有能力--force在远程仓库(权限)上使用。

因此,我希望能够以某种方式进行提交,以使masteranddeploy分支相同。基本上我想区分当前的部署和主分支,并将该差异添加为部署的提交。然后我可以合并deploymaster哪个不会导致任何更改,并且分支将重新同步。

只是合并masterdeploy现在是行不通的,因为deploy's 的更改将被保留。

我不担心提交历史。

我知道我可以通过git checkout <branch> <file>. 我基本上在寻找的是“从另一个分支签出所有文件,但不要切换到那个分支。” 然后我可以提交并从那里开始。

标签: gitbranching-and-merging

解决方案


使用我们合并策略,如下所示:

git checkout master
git merge deploy -s ours
git checkout deploy
git merge master
git push origin HEAD

将进行合并提交,deploy从任何地方进行 0 次修改deploy,从而从master. 但它不会改写历史,而且你可以在deploy没有--force.

或者,为了减少笨拙的历史记录(感谢eftshift0的巧妙技巧),您也可以采用这种方法:

git checkout --detach master
git merge -s ours deploy -m "setting content just like master"
git branch -f deploy
git push some-remote deploy

推荐阅读