git rebase 并保留所有子分支

标签 git

我正在尝试将 CVS 存储库导入 git。不幸的是,我们一直在使用一种非常古老的方法从我们的 CVS 存储库创建版本,它不涉及任何实际的 CVS 分支或标签,而是将这些信息保存在一个单独的系统中。因此,几乎所有的开发都发生在 CVS 主干上。因此,一个文件可能会在历史记录的很早的时候添加,但在 6 个月内不会成为发布的一部分。

我想做的是将这个 CVS 存储库导入到 git 中,并使用 rebase 将这些提交移动到开发分支。不过,我确实有一些来自 CVS 的分支,所以我真的很想移动所有分支。

说我有这个:

                  F---G---H topic
                 /
A---B---C---D---E---I---J master

B 是我想移动到它自己的分支的提交。我希望结果看起来像这样:

                F`---G`---H` topic
               /
A---C`---D`---E`---I`---J` master
 \
  B some_unfinished_feature

但仅对 master 进行 rebase 会导致:

git checkout -b some_unfinished_feature B
git rebase --onto A B master

A---C`---D`---E`---I`---J` master
 \
  \               F---G---H topic
   \             /
    B---C---D---E
     \-some_unfinished_feature

我可以让 git 在一个 rebase 命令中将 topic rebase 到 E' 上吗?我可能有很多分支,我想将它们移动到相应的新提交上。或者有什么方法可以获得 EE' 之间的映射?

最佳答案

               F---G---H topic
              /
 A---B---C---D---E---I---J master

 git checkout B
 git branch BRANCH-B
 git checkout master
 git rebase -i  HEAD~6

(删除提交 B)

 git rebase --onto D' D topic

假设没有冲突,应该这样做 ;)

关于git rebase 并保留所有子分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19060326/

相关文章:

git - 如何列出在另一个分支上修改的文件?

git - 为什么 Git 在我运行 "Not currently on any branch"后告诉我 "git checkout origin/<branch>"?

git - 通过命令行从 Azure Devops 下载应用程序

git - 自签名 SSL 证书与 Windows Server 2012、Bonobo Git 服务器一起使用

混帐 pull : permission denied

xcode - Xcode 中的自动递增内部版本号和使用 Git 的多个开发人员

git - 如何使用 Git 扩展处理 pull 请求?

windows - 如何在 Windows 上正确克隆 --recursive git 存储库?

git - 在个人 git repo 上使用 "go get"

git - 我将从 GIT(工作中)开始 - 我应该使用 GUI、GUI/终端还是仅使用终端?