如何创建使一个分支与另一个分支相同的提交?

时间:2019-02-26 15:44:05

标签: git branching-and-merging

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

在测试CI环境时,我对deploy分支进行了一系列测试。提交只是为了更改而进行了更改,只是为了测试CI触发器。现在可能有12个左右的提交,这些更改只是使愚蠢的随机(但在部署中可检测到)更改。既然配置项正在运行,我想将deploy分支“回滚”到当前的master

问题是我无法在远程存储库(权限)上使用--force

因此,我想做的就是以某种方式进行一次提交,使masterdeploy分支相同。基本上,我想比较当前的deploy和master分支,并将该diff添加为要提交的部署。然后,我可以将deploy合并到master中,这将导致不进行任何更改,并且分支将恢复同步。

仅将master合并到deploy中将不起作用,因为将保留deploy的更改。

我不担心提交历史。

我知道我可以通过执行git checkout <branch> <file>从另一个提交或分支引入单个文件。我基本上要寻找的是“从另一个分支签出所有文件,但不要切换到该分支。”然后我可以提交并从那里继续。

1 个答案:

答案 0 :(得分:2)

像这样使用名为merge strategyours

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

将对deploy进行合并提交,这将对deploy进行0修改,从而从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