git:如何移动最后N次提交到master,进入自己的分支?

时间:2010-12-30 13:30:45

标签: git branching-and-merging

我有一个存储库,我一直在master分支上工作,最后添加了大约10个左右的提交,我现在希望在另一个分支上,因为它们描述了我现在看到的实验工作(我仍然是学习好的git做法)。基本上我希望最后10个提交从master中的一个点开始形成自己的分支,这样我就可以master进行“释放”/“稳定”类提交。

我现在拥有的,最右边的X是最后一次实际上有利于发布的提交:

        b--b (feature B)
       /       
X--X--X--Z--Z--Z--Z--Z--Z (master)
    \
     a--a--a (feature A)

您可以看到XZ都在主人身上,而我想要的是Z标记的提交(我的“功能Z”工作),这些提交位于他们自己的功能上分支,所以master is at the rightmost 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”提交?

4 个答案:

答案 0 :(得分:13)

git checkout master
git branch feature-Z
git reset <commit_id>

其中commit_id是b分支之前的最后一次X提交的标识符。

答案 1 :(得分:5)

为了完整性,答案就在这里 - http://git-scm.com/docs/git-reset - 搜索文本“撤消提交,使其成为主题分支” - 该示例显示将最后3次提交作为分支并将主服务器重置为之前的提交对这3个提交:

$ 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

答案 2 :(得分:2)

只需重命名master并在最后一个X开始一个新的主人:

git checkout master; git branch -m feature; git checkout -b master HEAD~6

答案 3 :(得分:0)

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

git checkout -b feature-z
git branch -f master HEAD~10