GIT:最后一个分支状态到一个新分支

时间:2015-01-29 14:09:05

标签: git

我有两个分支:
  - 发展;
  - 新功能(来自开发);
分支中的40个提交 new-feature 我只需要将所有更改(最后新功能状态)设置为新分支 new-feature-single 。 我无法进行rebase,因为开发分支现在太新了,并且很难让rebase抛出所有40次提交。

4 个答案:

答案 0 :(得分:1)

首先,找到“开发”和“新功能”分支的共同祖先。根据你的描述,很可能是“开发”目前指出的提交,但有一个方便的命令来查找某些被称为merge-base的信息:

git merge-base new-feature development

让我们假设上面的命令吐出“abc123”。 接下来,根据提交“abc123”:

创建一个名为“new-feature-single”的新分支

git checkout -b new-feature-single abc123

您现在应该检出“new-feature-single”,这个新分支指向与“new-feature”分支开始的父级相同的父级。

最后,将“new-feature-single”合并到“new-feature”的提交中,然后将它们压缩到一个提交中:

git merge --squash new-feature

“new-feature-single”分支现在将“new-feature”的所有更改合并为一个提交。

答案 1 :(得分:1)

这就是我所要求的想法,尽管我并不完全清楚你希望实现的目标:

$ git checkout -b new-feature-single development
  # make a new branch, starting from development/HEAD, with no new commits
$ git merge --squash new-feature
  # apply all the changes from new-feature
$ git commit
  # create a single commit with all those changes

请注意,稍后将其与new-feature合并将无法正常运行,因为git会将您的更改视为独立两次,并且无法判断它们是否相关。

答案 2 :(得分:0)

  1. 创建另一个分支new-feature-single。
  2. 在new-feature-single到new-feature中添加一个远程上游:git remote add new-feature。
  3. 结帐新功能单分支。
  4. 将更改从新功能拉到新功能单:git pull new-feature
  5. 提示:列出连接到分支的所有源和其他远程URL:git remote -v

答案 3 :(得分:0)

这样做你想要的吗?

git checkout -b new-feature-single new-feature

这会创建一个新的分支new-feature-single,它指向new-feature当前所做的同一个提交。这似乎是你想要做的,但如果不是,也许还需要一些额外的澄清......

您的一条评论似乎表明,在此之后,您希望将new-feature-single转换为单一提交,以完成与new-feature中的提交顺序相同的更改。完成上述步骤后,您可以通过运行git rebase -i development..HEAD并将除第一行之外的所有操作更改为“压缩”(或简称为“s”)来完成此操作。如果您已完成上述步骤,那么这将不会触及您的new-feature分支,但会在new-feature-single上留下一个提交,从同一原始点分支,并包含new-feature提交序列。