如何创建使一个分支与另一个分支相同的提交?
How to create a commit that makes one branch identical to another?
假设我有两个分支:master
和 deploy
。 master
分支是当前的 "edge" 代码 - 功能和错误修复分支合并到 master
。另一方面,deploy
分支是我的 CI 系统监视以触发自动部署的分支。正常的工作流程是,一旦代码在 master
上被视为 "good",它就会合并到 deploy
,这会导致自动部署。
在测试 CI 环境时,我对 deploy
分支做了一堆测试提交。提交只是为了更改而更改,只是为了测试 CI 触发器。现在可能有 12 个左右的提交只是简单地进行愚蠢的随机(但在部署中可检测到)更改。现在 CI 正在工作,我想 "roll back" deploy
分支到当前 master
。
问题是我无法在远程仓库(权限)上使用 --force
。
因此,我希望能够以某种方式进行提交,使 master
和 deploy
分支相同。基本上我想区分当前的部署和主分支,并将该差异添加为部署提交。然后我可以将 deploy
合并到 master
中,这将导致不进行任何更改,并且分支将恢复同步。
现在只是将 master
合并到 deploy
是行不通的,因为 deploy
的更改将得到保留。
我不担心提交历史。
我知道我可以通过 git checkout <branch> <file>
从另一个提交或分支引入单个文件。我基本上要寻找的是 "check out ALL files from another branch but do not switch to that branch." 然后我可以提交并从那里开始。
像这样使用 merge strategy called ours :
git checkout master
git merge deploy -s ours
git checkout deploy
git merge master
git push origin HEAD
将在 deploy
上进行合并提交,从 deploy
中获取 0 次修改,因此从 master
中获取所有代码。但它不会重写历史,并且您可以在没有 --force
.
的情况下推送 deploy
或者,为了不那么笨拙的历史记录(感谢 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
假设我有两个分支:master
和 deploy
。 master
分支是当前的 "edge" 代码 - 功能和错误修复分支合并到 master
。另一方面,deploy
分支是我的 CI 系统监视以触发自动部署的分支。正常的工作流程是,一旦代码在 master
上被视为 "good",它就会合并到 deploy
,这会导致自动部署。
在测试 CI 环境时,我对 deploy
分支做了一堆测试提交。提交只是为了更改而更改,只是为了测试 CI 触发器。现在可能有 12 个左右的提交只是简单地进行愚蠢的随机(但在部署中可检测到)更改。现在 CI 正在工作,我想 "roll back" deploy
分支到当前 master
。
问题是我无法在远程仓库(权限)上使用 --force
。
因此,我希望能够以某种方式进行提交,使 master
和 deploy
分支相同。基本上我想区分当前的部署和主分支,并将该差异添加为部署提交。然后我可以将 deploy
合并到 master
中,这将导致不进行任何更改,并且分支将恢复同步。
现在只是将 master
合并到 deploy
是行不通的,因为 deploy
的更改将得到保留。
我不担心提交历史。
我知道我可以通过 git checkout <branch> <file>
从另一个提交或分支引入单个文件。我基本上要寻找的是 "check out ALL files from another branch but do not switch to that branch." 然后我可以提交并从那里开始。
像这样使用 merge strategy called ours :
git checkout master
git merge deploy -s ours
git checkout deploy
git merge master
git push origin HEAD
将在 deploy
上进行合并提交,从 deploy
中获取 0 次修改,因此从 master
中获取所有代码。但它不会重写历史,并且您可以在没有 --force
.
deploy
或者,为了不那么笨拙的历史记录(感谢 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