为什么我可以检出在 GitHub 上删除的分支?

Tim*_*Tim 28 git

在我们的 GitHub 存储库中,一位同事删除了一个名为 的分支release。但是当我在git checkout release本地运行时,我总是得到删除的分支release。同样,即使我签出另一个分支,删除了release分支git branch -D release并再次运行git checkout release

GitHub 存储库上有什么要修复的吗,还是我应该在本地修复一些东西?

rud*_*ier 28

在远程端删除分支后,您可能仍会在本地看到这个以前获取的远程分支,请参阅:

$ git branch -a
[...]
release
remotes/origin/release
[...]
Run Code Online (Sandbox Code Playgroud)

您只删除了“发布”但没有删除“遥控器/来源/发布”。像这样删除它:

$ git branch -rd origin/release
Run Code Online (Sandbox Code Playgroud)

或者删除远程端不再存在的所有获取的分支:

$ git remote prune origin 
Run Code Online (Sandbox Code Playgroud)


Ste*_*itt 15

当远程删除分支时,您需要修剪本地存储库 - 最简单的方法是使用

git fetch -p
Run Code Online (Sandbox Code Playgroud)

这将使用对远程存储库所做的所有更改来更新您的本地存储库,但不会更新任何本地分支。运行这个之后,

git branch --remote
Run Code Online (Sandbox Code Playgroud)

将不再显示已删除的远程分支。

git 存储库是完整的,无论是在您自己的系统上还是在服务器上。因此,当您第一次克隆存储库时,您会得到一个完整的副本,并且您的本地 git “知道”所有远程分支以及您的本地分支。此信息不会自动同步,因此当您的同事删除release服务器上的分支时,您的本地 git 存储库并没有失去远程release分支的概念。同步git fetch更新远程分支上的所有本地信息,使它们与服务器上的状态(严格来说,远程存储库,无论在哪里)相匹配,但不会删除远程分支上的任何本地信息。使用git fetch -p(or git fetch --prune, or git remote prune)修剪会删除已删除的远程分支上的本地信息。