我有一个存储库,我一直在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)
您可以看到X
和Z
都在主人身上,而我想要的是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”提交?
答案 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