HOWTO · Git

如何在 Git 上创建和使用分支

本教程介绍 Git 分支。我们将看到 Git 分支如何帮助你组织项目。

本页内容

若要从当前的提交创建分支,请运行 git branch feature/login。这会创建分支,但让你留在当前分支上。若要在一个步骤中创建并切换到该分支,请使用 git checkout -b feature/login。Git 分支是指向提交的轻量指针,因此除非你指定其他起点,否则这两个命令都会让新分支从当前分支的提交开始。

使用 git branch 创建和查看分支

运行不带参数的 git branch 以列出本地分支。Git 会在当前检出的分支前面放置一个星号。以下示例会创建一个临时仓库,添加一个提交,创建一个主题分支,并列出本地分支。星号标记当前检出的分支。Shell 在退出时会删除该临时仓库。

set -eu
tmp="$(mktemp -d)"
trap 'rm -rf "$tmp"' EXIT
git -C "$tmp" init -q -b main
git -C "$tmp" config user.name Example
git -C "$tmp" config user.email example@example.com
printf 'starter\n' > "$tmp/README.md"
git -C "$tmp" add README.md
git -C "$tmp" commit -qm "Add starter file"
git -C "$tmp" branch feature/login
git -C "$tmp" branch
  feature/login
* main

运行 git branch feature/login 可创建分支而不切换。若要重命名当前分支,请使用 git branch -m new-name;若要重命名另一个本地分支,请使用 git branch -m old-name new-name。-m 选项会重命名分支;它不会在不同位置之间移动分支。

对于已合并的本地分支,git branch -d feature/login 会要求 Git 删除它,而当 Git 认为它未合并时会拒绝。使用 git branch -D feature/login 时,应仅限于你打算移除本地分支引用,即使其提交可能未在其他地方合并。以这种方式删除分支不会清除仍可通过其他引用到达的提交,但只能从该分支到达的提交最终可能会被 Git 的清理移除。

这些命令影响本地分支。若要从名为 origin 的远程删除分支,请运行 git push origin --delete feature/login。这不会删除你的本地分支;如有需要,请另行移除它。

使用 git checkout -b 创建分支并切换到该分支

使用 git checkout existing-branch 切换到已存在的分支。使用 git checkout -b feature/login 在当前提交处创建新分支并立即切换到该分支。如果名称已存在,Git 会报告它无法创建该分支;请选择另一个名称或切换到现有分支。

如果未提交的编辑可以安全携带,它们在你切换分支时会留在工作树中。Git 不会提交这些编辑,也不会将它们专门保存到新分支上。它们保持未提交状态,并且可能出现在你切换到的分支上。如果切换会覆盖某个更改,Git 会停止并要求你先解决冲突。当你需要将工作分开保留时,请在切换前提交工作或使用 git stash。

切换后,运行 git status 以确认当前分支,并查看哪些文件仍保持已修改或未跟踪状态。例如,在 git checkout -b feature/login 之后,git status 应标识 feature/login;任何兼容的编辑在你提交、stash 或丢弃它们之前,仍会以工作树更改的形式出现。