假设我有两个分支:master
和deploy
。 master
分支是当前的“边缘”代码-功能和错误修复分支已合并到master
。另一方面,deploy
分支是我的CI系统监视触发自动部署的对象。正常的工作流程是,一旦在master
上将代码视为“良好”,它将被合并到deploy
中,从而导致自动部署。
在测试CI环境时,我对deploy
分支进行了一系列测试。提交只是为了更改而进行了更改,只是为了测试CI触发器。现在可能有12个左右的提交,这些更改只是使愚蠢的随机(但在部署中可检测到)更改。既然配置项正在运行,我想将deploy
分支“回滚”到当前的master
。
问题是我无法在远程存储库(权限)上使用--force
。
因此,我想做的就是以某种方式进行一次提交,使master
和deploy
分支相同。基本上,我想比较当前的deploy和master分支,并将该diff添加为要提交的部署。然后,我可以将deploy
合并到master
中,这将导致不进行任何更改,并且分支将恢复同步。
仅将master
合并到deploy
中将不起作用,因为将保留deploy
的更改。
我不担心提交历史。
我知道我可以通过执行git checkout <branch> <file>
从另一个提交或分支引入单个文件。我基本上要寻找的是“从另一个分支签出所有文件,但不要切换到该分支。”然后我可以提交并从那里继续。
答案 0 :(得分: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