玖叶教程网

前端编程开发入门

如何快速在 Git 中创建一个空分支(孤立分支)

  1. 应用场景介绍

有时候我们需要在 Git 项目仓库里面创建一个空分支,该分支不继承任何提交,没有父节点,是一个干净的分支。我们可以在这个分支里专门存放图片、文档或其他与代码无关的资料,目前 GitHub Pages 的项目主页默认会使用空分支创建。

例如:我现在想在gld仓库里创建一个img分支专门用来存放图片,而且我不想让这个存放图片的分支包含任何历史提交。

  1. 创建孤立(空)分支

使用git checkout -b命令创建的分支是有父节点的,这意味着新的分支包含了历史提交,所以我们需要使用git checkout --orphan命令,创建孤立分支。

git checkout --orphan img

=== Output ===
Switched to a new branch 'img'
  1. 清除内容

使用git checkout --orphan 分支名创建的分支会把原分支的内容拷贝过来,因为要创建空分支,所以需要使用git rm -rf .来清除拷贝的内容。

# 查看状态可以发现,原分支的文件被复制并添加了
git status

=== Output ===
On branch img
No commits yet
Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   LICENSE
        new file:   README.md
        new file:   Year2021/Dec/day27.md
        new file:   Year2021/Dec/day28.md
        new file:   Year2021/Dec/day29.md
        new file:   Year2021/Dec/day30.md
        new file:   Year2021/Dec/day31.md
        new file:   Year2022/day01.md
        new file:   Year2022/day02.md

# 删除所有文件
git rm -rf .

=== Output ===
rm 'LICENSE'
rm 'README.md'
rm 'Year2021/Dec/day27.md'
rm 'Year2021/Dec/day28.md'
rm 'Year2021/Dec/day29.md'
rm 'Year2021/Dec/day30.md'
rm 'Year2021/Dec/day31.md'
rm 'Year2022/day01.md'
rm 'Year2022/day02.md'

# 再次查看
git status

=== Output ===
On branch img
No commits yet
nothing to commit (create/copy files and use "git add" to track)
  1. 初始化空分支

如果空分支没有任何文件被提交的话,使用git branch是看不到空分支的,我创建一个README.md文件来描述这个分支。提交后,再使用git branch就能看到我创建的空分支img了。

使用branch来查看分支是否创建成功

# 未提交孤立分支前
git branch -a

=== Output ===
  main
  remotes/origin/HEAD -> origin/main
  remotes/origin/main

# 添加文件(README.md)到暂存区
git add .
# 提交
git commit -m "Initial commit"
# 再次查看
git branch -a

=== Output ===
* img
  main
  remotes/origin/HEAD -> origin/main
  remotes/origin/main
  1. 提交到远程分支
git push origin img

=== Output ===
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 244 bytes | 244.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote:
remote: Create a pull request for 'img' on GitHub by visiting:
remote:      https://github.com/geometryolife/gld/pull/new/img
remote:
To github.com:geometryolife/gld.git
 * [new branch]      img -> img

# 此时可以看到远程分支了,也可以在 GitHub 上查看
git branch -a

=== Output ===
* img
  main
  remotes/origin/HEAD -> origin/main
  remotes/origin/img
  remotes/origin/main
  1. git ckeckout --orphan 帮助信息

<start_point>开始创建一个名为<new_branch>的新孤儿分支,并切换到它。在这个新分支上的第一个提交将没有父,这将是与所有其他分支和提交完全脱节的新历史的根源。

索引和工作树的调整就像您之前运行git checkout <start_point>一样。这允许您通过轻松运行git commit -a进行根提交来启动新的历史记录,记录一组类似于<start_point>的路径。

当您想在不暴露其完整历史记录的情况下从提交发布树时,这可能会很有用。您可能希望这样做是为了发布当前树为“干净”但其完整历史记录包含专有或其他受困代码位的项目的开源分支。

如果您想开始一个断开连接的历史记录,记录一组与<start_point>完全不同的路径,那么您应该在创建孤儿分支后立即从工作树的顶层运行git rm -rf .来清除索引和工作树。之后,您将准备好准备新文件,重新填充工作树,从其他地方复制它们,提取tarball等。


实战

下面我用另一个仓库演示一遍,通过上面文字看懂的朋友可以跳过这步。

克隆——检查分支情况——检出分支——删除文件

ls 查看是否删完——echo 重定内容到 README——查看分支情况

发布到远程 GitHub 远程分支——在 GitHub 查看

这里就带大家实战完了文章主要内容,大家也可以动手玩一玩。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言