将提交移动到新分支而不触及索引或工作树

时间:2012-11-15 11:56:01

标签: git version-control commit

此处有一个家长问题:Move the most recent commit(s) to a new branch with Git

我接管了一个项目,其中包含一个仍然需要组织的文件的工作树 - 有些是指正在进行的工作任务;其他人完成了。我最近承诺完成了一项工作,但这并不是为了生产。如何谨慎地将其移动到一个新的分支而不会搞砸我当前的树?

I'd like to change

Working tree - A - B - C - D - E

to

Working tree - B - C - D - E
              /
             A

3 个答案:

答案 0 :(得分:0)

使用checkout -b "name of branch",您将创建一个新的本地分支。

答案 1 :(得分:0)

git branch tmp
git reset --soft B

将HEAD(并且只有HEAD)移动到B(在用A'分支标记tmp之后)

有关reset --soft的更多信息,请参阅“Practical uses of git reset --soft?”。

答案 2 :(得分:0)

首先在某个地方写下A的SHA1,你以后会需要它。

git checkout <E's SHA1>
git rebase -i HEAD~6(6是从E到A加1的提交距离)

在编辑器中删除A&#39行并保存。

现在你有了这个:

 Working tree - B - C - D - E

现在我们要创建一个分支到A,从B开始:

git checkout <B's SHA1>
git branch BAbranch(或任何你想称之为的内容)
git checkout BAbranch
git cherry-pick <A's SHA1>

现在你有了这个:

 Working tree - B - C - D - E

                  \

                     A