GIT: 最后一个分支状态到一个新的分支
GIT: last branch state to a new branch
我有2个分支:
- 发展;
- 新功能(来自开发);
分支 new-feature.
中有 40 次提交
我只需要将 all changes(最后一个 new-feature 状态)设置为一个新分支 new-feature-single.
我不能做 rebase,因为 development 分支现在太新了,很难让 rebase 抛出所有 40 个提交。
- 创建另一个分支 new-feature-single。
- 在 new-feature-single 中添加远程上游到 new-feature:git 远程添加新功能。
- 结帐到新功能单分支。
- 将更改从新功能拉到新功能单一:git拉新功能
提示:列出所有源和其他远程 url 连接到分支:git remote -v
这是你想要的吗?
git checkout -b new-feature-single new-feature
这将创建一个新分支 new-feature-single
,指向 new-feature
当前所做的同一提交。这似乎是您想要做的,但如果不是,则可能需要一些额外的说明...
您的一条评论似乎表明,在此之后,您希望将 new-feature-single
转换为单次提交,以完成与 new-feature
中的提交序列相同的更改。在上述步骤之后,您可以通过 运行 git rebase -i development..HEAD
并将除第一行以外的所有操作更改为 "squash"(或简单地 "s")来完成。如果您完成了上述步骤,那么这将不会触及您的 new-feature
分支,但会留下 new-feature-single
上的单个提交,从相同的原始点分支,并包含累积更改new-feature
提交顺序。
首先,找到 "development" 和 "new-feature" 分支的共同祖先。根据您的描述,它很可能是 "development" 当前指向的提交,但是有一个方便的命令可以找到某些名为 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" 的提交合并到 "new-feature-single" 中,并将它们全部压缩为一个提交:
git merge --squash new-feature
"new-feature-single" 分支现在将 "new-feature" 中的所有更改合并到一个提交中。
这就是我认为你所要求的,虽然我不完全清楚你希望实现什么:
$ 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个分支:
- 发展;
- 新功能(来自开发);
分支 new-feature.
中有 40 次提交
我只需要将 all changes(最后一个 new-feature 状态)设置为一个新分支 new-feature-single.
我不能做 rebase,因为 development 分支现在太新了,很难让 rebase 抛出所有 40 个提交。
- 创建另一个分支 new-feature-single。
- 在 new-feature-single 中添加远程上游到 new-feature:git 远程添加新功能。
- 结帐到新功能单分支。
- 将更改从新功能拉到新功能单一:git拉新功能
提示:列出所有源和其他远程 url 连接到分支:git remote -v
这是你想要的吗?
git checkout -b new-feature-single new-feature
这将创建一个新分支 new-feature-single
,指向 new-feature
当前所做的同一提交。这似乎是您想要做的,但如果不是,则可能需要一些额外的说明...
您的一条评论似乎表明,在此之后,您希望将 new-feature-single
转换为单次提交,以完成与 new-feature
中的提交序列相同的更改。在上述步骤之后,您可以通过 运行 git rebase -i development..HEAD
并将除第一行以外的所有操作更改为 "squash"(或简单地 "s")来完成。如果您完成了上述步骤,那么这将不会触及您的 new-feature
分支,但会留下 new-feature-single
上的单个提交,从相同的原始点分支,并包含累积更改new-feature
提交顺序。
首先,找到 "development" 和 "new-feature" 分支的共同祖先。根据您的描述,它很可能是 "development" 当前指向的提交,但是有一个方便的命令可以找到某些名为 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" 的提交合并到 "new-feature-single" 中,并将它们全部压缩为一个提交:
git merge --squash new-feature
"new-feature-single" 分支现在将 "new-feature" 中的所有更改合并到一个提交中。
这就是我认为你所要求的,虽然我不完全清楚你希望实现什么:
$ 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 看到您 独立 进行了两次更改,并且不能告诉他们他们是相关的。