假设我有两个分支:master
和deploy
。 master
分支是当前的“边缘”代码 - 功能和错误修复分支合并到master
。另一方面,deploy
分支是我的CI系统监视触发自动部署的内容。正常的工作流程是,一旦代码在master
上被认为是“好的”,它就会合并到deploy
,从而导致自动部署。
在测试CI环境时,我对deploy
分支进行了一系列测试提交。为了测试CI触发器,提交只是为了更改而进行了更改。现在可能有大约12个提交只是随机变量(但在部署中可检测到)变化。现在CI正在工作,我想“回滚”deploy
分支到当前的master
。
问题是我没有能力在远程仓库(权限)上使用--force
。
因此,我希望能够以某种方式进行提交,使master
和deploy
分支相同。基本上我想区分当前的部署和主分支,并将该diff添加为部署提交。然后我可以将deploy
合并到master
中,这将导致不做任何更改,并且分支将重新同步。
由于master
的改变将保持不变,现在将deploy
合并到deploy
是行不通的。
我并不担心提交历史。
我知道我可以通过执行git checkout <branch> <file>
从另一个提交或分支引入单个文件。我基本上寻找的是“检查来自另一个分支的所有文件,但不要切换到该分支。”然后我可以做一个提交并从那里开始。
使用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