如何删除本地和远程 Git 分支
如何删除本地和远程 Git 分支
分支是仓库中的一部分,我们在其中编写新功能、修复错误等。例如,如果三个开发人员正在开发一个项目,他们可以创建自己的分支并在这些分支上工作,因为分支是隔离的,因此每个人都可以工作在他们独立的分支上。 分支可以是:
- 本地 – 仅在你的本地计算机上。
- 远程 – 它位于远程位置,例如在 GitHub 仓库中
实际上,还有第三种类型的分支,即对远程分支的引用。清理的时候,这些分支也要清理干净。今天本文将讨论与分支删除相关的各种场景。本文将向你展示如何删除本地分支和 GitHub 上的远程分支以及删除分支时还会遇到一些常见错误。
为什么需要删除分支
为了确保你的 Git 仓库不是一堆过时且不再使用的旧分支。你应该定期清理分支,删除旧分支或将它们合并到主分支中,代码仓库才会整洁。
删除 Git 本地分支
请注意,删除本地分支不会删除远程分支。这是本地删除分支的命令:
git branch -d "branch name"
下面的命令也将执行相同的功能,只是语法略有不同。
git branch --delete <branch>
请注意,-d
选项是 --delete
的缩写,仅当分支完全合并到其父分支中时才会删除该分支。如果你有未合并的更改,那么它不会删除分支,并且你将收到错误提示。如果要删除分支,无论合并状态如何,都需要强制删除分支。你可以使用以下命令强制删除本地分支:
git branch -D <branchName>
另一点要记住的是 rebase/merge。如果你的分支处于 rebase/merge 过程中,你将看到错误“Rebase/Merge in progress”,并且你将无法删除你的分支。如果你愿意,可以强制删除,或者可以在重试之前解决 rebase/merge 问题。
删除 Git 远程分支
要从远程仓库中删除分支,请使用以下命令:
git push origin -d "branch name"
在上面的示例中,远程分支 dev-testing
被删除。以下两个命令都会删除远程分支:
git push <remote_name> --delete <branch_name>
如果你使用的 Git 版本早于 1.7.0,则以下命令适用:
git push <remote_name> :<branch_name>
请注意,执行 git push origin –delete
只会删除你的远程分支。命令末尾未提及分支名称,但是,如果你将分支名称放在末尾,它将同时将其删除并推送到远程。
什么是跟踪分支以及如何删除它们
当我们从远程分支 check out
本地分支时,它会自动创建所谓的跟踪分支。这些是与远程分支有直接关联的本地分支。这意味着它存在于我们的本地计算机缓存中,但不存在于远程仓库中。
如果你使用命令 git push origin :<branchname>
删除了远程分支,则其引用仍然存在于团队成员的本地代码仓库中。现在,你还需要删除本地引用。 git remote prune origin
删除远程上不存在的分支的引用。
同一命令的另一个版本是:git fetch <remote> --prune
这将删除所有过时的远程跟踪分支。该命令的缩写是: git fetch <remote> -p
要删除特定的本地远程跟踪分支,可以使用以下命令: git branch --delete --remotes <remote>/<branch>
该命令的缩写是: gitbranch -dr <remote>/<branch>
请注意,如果你使用 git push
从命令行删除远程分支 X
,那么它也会删除本地远程跟踪分支 origin/X
,因此无需使用 git fetch -prune
或 git fetch –p
删除过时的远程跟踪分支。
要确认远程跟踪分支是否被删除,可以运行以下命令:
git branch –remotes
可简写为:
git branch –r
如何使用 Web 控制台删除 Github 上的分支
- 导航到仓库的主页。
- 在文件列表上方,单击分支。
- 导航到要删除的分支,然后单击删除图标
常见问题
无法删除分支
解决方案:你无法删除已经所在的分支。你必须先切换到另一个分支,然后删除所需的分支。请参阅下面的示例:
在上面的例子中,我们切换到另一个名为 dev-arsam
的分支,然后我们能够成功删除 test
分支。
我不小心删除了一个分支,我可以恢复它吗?
解决方案:是的,你可以使用 git reflog
命令并在已删除分支的顶部找到提交的 SHA1
,然后只需 git checkout [sha]
。一旦你进行了该提交,你只需 git branch branchname<SHA>
即可从那里重新创建分支。
git reflog
命令用于记录对分支最近所做的更新。它允许返回提交。重写历史记录后,引用日志包含先前分支提交的历史记录,并可以在需要时返回到特定状态。
下面提供了一个示例,其中名为 dev-arsam
的分支将被恢复。
如何在合并回 master 时自动删除分支
你可以设置配置,以便你的分支在合并到其父分支例如 master
分支后立即自动删除:
- 在 GitHub 上,转到仓库的主页。
- 在你的仓库名称下,单击“设置”。
- 在“Pull Requests”下,选择或取消选择
Automatically delete head branches
。
当我删除与标签同名的分支时出现错误
如果你尝试删除与 tag
同名的分支,你可能会收到错误消息。你将看到类似于 branch-or-tag-name matches more than one
的错误。
如果你想指定删除分支而不是 tag
,请尝试以下命令:
git push origin :refs/heads/branch-name
同样,如果你想指定删除 tag
而不是分支,请使用以下命令:
git push origin :refs/tags/tag-name
小结
在本文中,我们了解了在 Git 中删除分支的不同方法,还回答了与在 Git 中删除分支相关的常见问题,相信你在日常工作开发中可以得心应手。
转载自:https://juejin.cn/post/7249902602018996280