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

问题描述 投票:2回答:1

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

在测试CI环境时,我对deploy分支进行了一系列测试提交。为了测试CI触发器,提交只是为了更改而进行了更改。现在可能有大约12个提交只是随机变量(但在部署中可检测到)变化。现在CI正在工作,我想“回滚”deploy分支到当前的master

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

因此,我希望能够以某种方式进行提交,使masterdeploy分支相同。基本上我想区分当前的部署和主分支,并将该diff添加为部署提交。然后我可以将deploy合并到master中,这将导致不做任何更改,并且分支将重新同步。

由于master的改变将保持不变,现在将deploy合并到deploy是行不通的。

我并不担心提交历史。

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

git branching-and-merging
1个回答
2
投票

使用merge strategy称为ours,如下所示:

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
© www.soinside.com 2019 - 2024. All rights reserved.