改变主人的历史

时间:2019-09-30 19:21:49

标签: git

是否可以如下更改主分支历史记录?

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不存在。

1 个答案:

答案 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历史记录并不意味着对您的邻居看起来很漂亮,(希望)是过去步骤的可靠见证。所有这些都是非常明确的一系列步骤,以后任何人都可以检查和理解。