一、场景
当分支完成合并已删除后,这时需要基于某个版本进行特殊需求或者修复bug,可以找到所需版本提交记录的commit_id,基于该id检出新分支。
快捷指令示例:
git checkout -b feature/branch_name dc7b490
也可以指定检出某一段提交记录,使用 git checkout -b feature/branch_name start...end 这种形式即可,start为开始的commit_id,end为结束的commit_id,注意,start的提交时间要早于end,否则将会失败。
拆解步骤:
1、切换到指定的commit_id(此时会创建一个临时分支,如果此时切换到其它分支会视为丢弃该临时分支)
git checkout commit_id
2、创建新分支
git checkout -b <分支名称>
3、推送分支到远端
git push -u origin <分支名称>
二、如何恢复已删除的分支
如果你误删了一个分支,可以使用以下步骤来尝试恢复它
- 检查分支列表:首先,运行
git branch -a命令来查看本地和远程分支的列表。确认被误删的分支是否还存在于本地或远程仓库中。 - 恢复本地分支:如果被误删的分支还存在于本地仓库中,可以使用
git reflog命令来查看命令历史记录,找到删除分支前的最新提交的哈希值(commit_id)。然后,可以使用git checkout -b <branch_name> <commit_id>命令来创建一个新的分支,基于之前的提交,并恢复它。请将 <branch_name> 替换为分支的名称,<commit_id> 替换为之前删除分支时的提交哈希值。 - 恢复远程分支:如果被误删的分支是一个远程分支,可以使用
git reflog show origin/<branch_name>命令来查看该远程分支的命令历史记录。找到删除分支前的最新提交的哈希值,然后可以使用git branch <branch_name> origin/<branch_name>命令来创建一个新的本地分支来恢复远程分支。请将 <branch_name> 替换为分支的名称。
请注意,如果之前已经将这些删除操作推送到远程仓库,恢复的分支可能会有差异,因为推送是不可逆的操作。另外,在恢复分支之后,建议立即进行合适的备份和分支保护措施,以避免类似情况再次发生。
三、拓展小知识
checkout 命令具有 分支管理 和 文件恢复 两个核心功能,功能较多,不够准确。在 git 2.23 版本(2020年)中新增了 switch 和 restore 命令,用于替代 checkout 命令进而分化 checkout 命令的职责,这意味着 checkout 命令将在未来退出历史舞台。git 社区决定这样做,是因为目前 checkout 命令承载了太多的功能,这让新手们感到困惑,checkout 的两个核心功能: 分支管理和文件恢复,未来将分别由 switch 和 restore 负责。
1、switch创建分支
switch 创建分支使用参数 -c, --create,而 checkout 使用的是 -b
git switch -c
git checkout -b
switch 强制创建分支使用参数 -C, --force-create,而 checkout 使用的是 -B【强制创建适用于分支已存在的情况】
git switch -C
git checkout -B
以指定提交记录创建分支
git switch -c
2、switch 切换分支
switch 切换分支和 checkout 切换分支语法格式相同
git switch
git checkout