13

我有一个存储库,我一直在master分支上工作,最后添加了大约 10 个左右的提交,我现在希望这些提交在另一个分支上,因为它们描述了我现在认为是实验性的工作(我仍在学习良好的 Git 实践)。

考虑到这一点,我现在想让这最后 10 个提交形成他们自己的分支,可以这么说,这样我就可以master只为“发布”/“稳定”提交保留干净和保留。

为了说明,我所拥有的是:

        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”提交移动到他们自己的分支上呢?

4

4 回答 4

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

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

于 2010-12-30T13:49:20.023 回答
6

为了完整起见,答案在这里 - http://git-scm.com/docs/git-reset - 搜索文本“撤消提交,使其成为主题分支” - 该示例显示将最后 3 次提交设为分支并将 master 重置为这 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
于 2011-08-12T20:26:48.857 回答
2

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

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

于 2010-12-30T14:16:24.927 回答
0

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

git checkout -b feature-z
git branch -f master HEAD~10
于 2019-10-06T06:45:31.390 回答