是否可以如下更改主分支历史记录?
branch-a commits [the rightmost is the last]
a-b-c
master
a-b-d-e-f-g
将母版修改为
a-b-c
同时保留当前主服务器(可能在另一个分支)中的更改。换句话说,我希望该分支-a成为主节点,并将对主节点的更改删除到另一个功能分支。
背景:在我们的服务器中,我们会定期从git服务器中提取并部署master分支。当前运行的主版本有点过时。最后一次提交于9月9日进行。之后,我们在那里合并了一些功能分支,几天前规格也发生了变化。因此,应该暂时忽略该日期(9月9日)之后的提交,我们需要在部署的最后一个分支之上合并另一个分支。挑樱桃没有用,或者我做错了什么。
在分支主管上,我喜欢采摘
git cherry-pick -x <last-commit-to-branch-a> # commit b
现在git登录master好像是这样
a-c
并且b
不存在。
答案 0 :(得分:0)
由于您无法更改历史记录(在上面的问题中添加了注释),因此只需还原不需要的内容,然后添加缺少的内容即可。
git checkout master
git branch backup-master
git revert g f e d
此时,您的历史记录如下
branch-a commits [the rightmost is the last]
a-b-c
backup-master
a-b-d-e-f-g
master
a-b-d-e-f-g-g'-f'-e'-d'
其中,每个带有'
的提交都包含与之完全相反的更改,而没有将'
放在首位。请注意,我们以相反的顺序还原了它们,以避免不必要的冲突。
最后,我们需要带回(不是真正带上它,而是将其复制到此处)丢失的提交c
(在这里我将其称为C
来区分还原提交和精心挑选的提交)< / p>
git cherry-pick c
branch-a commits [the rightmost is the last]
a-b-c
backup-master
a-b-d-e-f-g
master
a-b-d-e-f-g-g'-f'-e'-d'-C
两者之间的历史记录明显不同,但是分支之间的文件树应该相同,无需重写历史记录,只需添加更多历史记录即可。
当然有人会说它“看起来”有些混乱,但是git历史记录并不意味着对您的邻居看起来很漂亮,(希望)是过去步骤的可靠见证。所有这些都是非常明确的一系列步骤,以后任何人都可以检查和理解。