Git分离独立分支

1,041 阅读1分钟

问题描述

beta 分支上是本项目从零重构的『新版本』,后续 master 与 beta 将分开维护,实际两个版本也无关联。因此不希望在 beta 分支看见 master 的历史记录,而是生成一个独立分支 (next) 。

brunch-cherry-pick

解决方法

  1. 生成一个没有提交记录的空分支 next ,此时暂存区存有原 HEAD 的内容

    git checkout --orphan next
    
  2. 使用git rm --cached <filename>,将变更移出暂存区,删除所有变更(保留 .git),使当前看起来像一个新的项目。

    no-commits

  3. 拷贝 master-HEAD 到 beta-HEAD ,不包括 master-HEAD

    git cherry-pick master...beta
    
  4. 拷贝由旧到新,如果产生冲突,按当前应进行拷贝的记录 add 和 commit 即可,执行 git cherry-pick --continue 继续拷贝。

  5. 最后得到一个与 master 不同源的独立分支,包括生成 beta 后的所有历史记录。

git cherry-pick

用于将其他分支已有变更应用于当前分支,就是拷贝记录

# 拷贝某一记录
git cherry-pick <commitHash>

# 拷贝某一分支的最新一条记录
git cherry-pick <branchName>

# 拷贝两条记录
git cherry-pick <HashA> <HashB>

# 拷贝一段记录(不含起点)
git cherry-pick <HashA>...<HashB>

# 拷贝一段记录(含起点)
git cherry-pick <HashA>^...<HashB>

详细用法参考阮一峰-git cherry-pick 教程