我有两个分支:
- 发展;
- 新功能(来自开发);
分支中的40个提交 new-feature
我只需要将所有更改(最后新功能状态)设置为新分支 new-feature-single 。
我无法进行rebase,因为开发分支现在太新了,并且很难让rebase抛出所有40次提交。
答案 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)
提示:列出连接到分支的所有源和其他远程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
提交序列。