有时候需要创建新的分支,但是原有分支的提交非常多,不好区分哪些是创建分支之后的提交。
那么就把原分支的提交全部去掉
要从 分支1 创建 分支2,并确保 分支2 不包含任何提交历史,同时文件与 分支1 的最后一次提交一致,可以使用孤立分支(orphan branch)或重置方法。不过,你希望的是保留文件的状态,而不是提交历史。
# 确保当前在分支1
git checkout 分支1 # 创建一个新的孤立分支分支2
git checkout --orphan 分支2 # 将当前分支1的文件状态复制过来
git rm -rf .
git checkout 分支1 -- .# 提交当前文件状态
git commit -m "Initial commit on branch 2 with files from branch 1"
解释
-
git checkout 分支1
:- 切换到
分支1
,确保你从正确的分支开始。
- 切换到
-
git checkout --orphan 分支2
:- 创建一个名为
分支2
的孤立分支。此时,分支2
没有任何提交历史。
- 创建一个名为
-
git rm -rf .
:- 删除当前工作区中的所有文件。由于是孤立分支,这一步是必要的,以确保在添加新文件时不会保留旧的内容。
-
git checkout 分支1 -- .
:- 从
分支1
中检出所有文件,并将其放入当前工作区。这时,分支2
的文件内容与分支1
完全一致。
- 从
-
git commit -m "Initial commit on branch 2 with files from branch 1"
:- 提交当前文件状态,创建
分支2
的第一次提交。
- 提交当前文件状态,创建
合并支持
现在,分支2
的提交历史是空的,只有你刚才的初始提交,且文件内容与 分支1
一致。之后,分支2
可以正常进行合并操作。这种方法可以实现你所需的效果:新分支没有旧的提交历史,但文件状态保持一致。
git checkout 分支1 -- .
这个命令用于将 分支1
的文件内容检出到当前工作目录。具体来说,这个命令的组成部分可以解释如下:
各部分的意义
-
git checkout
:- 这是一个 Git 命令,用于切换分支、恢复文件等。
-
分支1
:- 这是你要从中检出的分支的名称。在这个例子中,是指
分支1
。
- 这是你要从中检出的分支的名称。在这个例子中,是指
-
--
:--
是一个分隔符,用于告诉 Git 后面的内容是文件或路径,而不是分支名。这在处理分支名和文件名可能冲突时特别有用,确保 Git 正确理解命令。
-
.
:.
表示当前目录,实际上代表的是当前工作区中的所有文件和文件夹。使用.
可以指定检出当前目录及其子目录中的所有文件。
整体作用
因此,git checkout 分支1 -- .
的整体作用是将 分支1
中的所有文件(包括子目录中的所有文件)检出到当前工作目录,从而使当前工作目录的文件内容与 分支1
中的内容一致。
这条命令的实际效果是在不切换分支的情况下,将 分支1
的最新文件内容复制到当前分支的工作目录。这样,当前分支(在本例中是孤立分支 分支2
)的文件状态就会匹配 分支1
。