git - 如何创建使一个分支与另一个分支相同的提交?
问题描述
假设我有两个分支:master
和deploy
. 该master
分支是当前的“边缘”代码 - 功能和错误修复分支合并到master
. deploy
另一方面,分支是我的 CI 系统监视以触发自动部署的内容。正常的工作流程是,一旦代码在 上被认为是“好的” master
,它就会被合并,deploy
从而导致自动部署。
deploy
在测试 CI 环境时,我对分支做了一堆测试提交。提交只是为了更改而进行更改,只是为了测试 CI 触发器。现在可能有 12 个左右的提交只是简单地进行愚蠢的随机(但在部署中可检测到)更改。现在 CI 正在工作,我想将分支“回滚”deploy
到当前的master
.
问题是我没有能力--force
在远程仓库(权限)上使用。
因此,我希望能够以某种方式进行提交,以使master
anddeploy
分支相同。基本上我想区分当前的部署和主分支,并将该差异添加为部署的提交。然后我可以合并deploy
到master
哪个不会导致任何更改,并且分支将重新同步。
只是合并master
到deploy
现在是行不通的,因为deploy
's 的更改将被保留。
我不担心提交历史。
我知道我可以通过git checkout <branch> <file>
. 我基本上在寻找的是“从另一个分支签出所有文件,但不要切换到那个分支。” 然后我可以提交并从那里开始。
解决方案
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