如何将当前在一个分支上的最后一个Git提交移动到另一个分支上? 我有一个仓库,我一直在写代码>师父< /代码>分支,上次添加了大约10个这样的提交,现在我希望在另一个分支上,因为它们描述了我现在认为实验的工作(我仍然在学习好的Git实践)。

如何将当前在一个分支上的最后一个Git提交移动到另一个分支上? 我有一个仓库,我一直在写代码>师父< /代码>分支,上次添加了大约10个这样的提交,现在我希望在另一个分支上,因为它们描述了我现在认为实验的工作(我仍然在学习好的Git实践)。,git,branching-and-merging,Git,Branching And Merging,考虑到这一点,我现在想让最后10次提交形成自己的分支,这样我就可以将master清理并保留为“release”/“stable”提交 举例来说,我所拥有的是: b--b (feature B) / X--X--X--Z--Z--Z--Z--Z--Z (master) \ a--a--a (feature A) 您可以看到用X和Z标记的提交都在master分支上,而我想要的是用Z标记的提交(现在被认为是实验性的“功能Z”工作)位于它们

考虑到这一点,我现在想让最后10次提交形成自己的分支,这样我就可以将
master
清理并保留为“release”/“stable”提交

举例来说,我所拥有的是:

        b--b (feature B)
       /       
X--X--X--Z--Z--Z--Z--Z--Z (master)
    \
     a--a--a (feature A)
您可以看到用
X
Z
标记的提交都在
master
分支上,而我想要的是用
Z
标记的提交(现在被认为是实验性的“功能Z”工作)位于它们自己的分支上,并且
master
以最右边的
X
结尾。为了举例说明,所需的图形:

        b--b (feature B)
       /       
X--X--X (master)
    \  \
     \  Z--Z--Z--Z--Z--Z (feature Z - the new branch I want)
      \
       a--a--a (feature A)
这样,我将保留我的
master
用于发布和其他稳定提交,能够根据需要合并到A、B和Z特性中

那么如何将“Z”提交移动到它们自己的分支上呢?

git checkout master
git checkout master
git branch feature-Z
git reset <commit_id>
git分支特征-Z git重置

其中commit_id是b分支之前最后一个X commit的标识符。

只需重命名master并在最后一个X处启动一个新的master:


git签出主机;git分支-m特征;git checkout-b master HEAD~6

为了完整性,答案在这里--搜索文本“撤消提交,使其成为主题分支”-示例显示使最后3次提交一个分支,并在这3次提交之前将master重置为提交:

$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 3 commits.
#
nothing to commit (working directory clean)
$ git branch topic/wip
$ git reset --hard HEAD~3
$ git checkout topic/wip
Switched to branch topic/wip

在所需的新分支中创建和签出
强制主分支N提交回(在您的情况下为10)


您可能需要重设git--hard。如果有任何修改没有被签入,在它前面加一个
git-stash
,在它后面加一个
git-stash-pop
。基本同意。因为他没有说/要求任何关于启动/希望工作树状态的内容,我就按照他的要求加入了最小的输入解决方案。他似乎知道足够多的信息,可以自己想出细节。我更新了你的评论,以帮助其他不愿意的人看到它。这给我留下了一个旧的主签出,Z中的所有更改都未提交或未跟踪。我不得不手动清理它们,以便能够
git checkout feature-Z
@Calimo:如果混合重置结果干扰了你,你就是亚里士多德变体的候选者。你的建议的一个缺点是,现在的功能是跟踪origin/master。kernel.org链接已经变成404,但是
man-git-rebase
将提供您的git版本的最新版本。可能的副本
git checkout -b feature-z
git branch -f master HEAD~10