是否可以在git中合并一个分支并保存历史?

是否可以在git中合并一个分支并保存历史?,git,git-svn,Git,Git Svn,我在工作中使用git svn与我们的Subversion存储库进行接口。我创建了一个分支(我们称之为FeatureBranch)来处理一个新的功能,但是必须切换回主分支来处理其他的东西。当我开始在FeatureBranch上做应该做的事情时,我忘了再次签出FeatureBranch,并在意识到我做了什么之前向主分支做了几次承诺 我原本计划执行以下操作来修复此问题(我尚未提交对Subversion的更改,因此它们都被分组为我最近所做的提交): 其中n是我希望从主分支中删除的提交数,因为它们现在将在

我在工作中使用git svn与我们的Subversion存储库进行接口。我创建了一个分支(我们称之为FeatureBranch)来处理一个新的功能,但是必须切换回主分支来处理其他的东西。当我开始在FeatureBranch上做应该做的事情时,我忘了再次签出FeatureBranch,并在意识到我做了什么之前向主分支做了几次承诺

我原本计划执行以下操作来修复此问题(我尚未提交对Subversion的更改,因此它们都被分组为我最近所做的提交):


其中n是我希望从主分支中删除的提交数,因为它们现在将在FeatureBranch中。然而,git merge在合并到另一个分支时似乎并没有保留历史记录(它显示为单个提交)。如何只将git中的某些提交合并到另一个分支,同时保留历史记录?我以前听过cherry pick这个词,这是我应该研究的功能吗?

是的,您可能想使用git cherry pick来实现这个功能。你会毫不夸张地挑选每一个你想带回给大师的承诺


在不解释整个樱桃采摘过程的情况下,这里有一些方法可以帮助您

使用
git-rebase-on
实现这一点。有关详细信息,请参阅git help rebase。

谢谢,我会查看它们。在确认Git Svn是否有效之前,我总是很小心尝试新事物。这很有魅力,谢谢。谢天谢地,我只需要修改大约8个提交,如果再修改的话,我会对自己更加生气(非常乏味!)
git checkout FeatureBranch
git merge master
git checkout master
git reset --hard HEAD~n