如果他们的远程跟踪引用不再存在,请删除本地Git分支

时间:2017-06-10 20:19:36

标签: git github version-control branch git-branch

我有一个本地和远程Git存储库。

  • 在我的本地存储库中,我创建并切换到新分支:git checkout -b feature/niceNewFeature

  • 我的编码,git add .git commitgit push我的feature/niceNewFeature分支到远程存储库(例如GitHub)。

  • 在此之后,我创建了一个GitHub Pull请求以将feature/niceNewFeature分支合并到master - 在审核代码之后,我会这样做。

  • 由于feature/niceNewFeature现已合并到master,我将在GitHub上将其删除。

  • 但是,在我的本地存储库中,如果执行git branch命令,仍会列出feature / niceNewFeature分支。

如何从本地存储库中删除feature/niceNewFeature分支,因为它已经合并到master并从远程存储库中删除了?

2 个答案:

答案 0 :(得分:9)

简答:

git fetch --prune

git branch -lvv | cut -c3- | awk '/: gone]/ {print $1}' | xargs git branch -d

详细答案:

首先,删除遥控器上不再存在的所有远程跟踪引用:

git fetch --prune(或git fetch -p

如果你这样做,然后你运行git branch -vv(详细),你会看到虽然仍然列出了feature/niceNewFeature分支,但是上游分支现在已经消失了#34;

feature/niceNewFeature  832f7a7 [origin/feature/niceNewFeature: gone] Some commit message.

其次,让我们使用以下命令删除本地分支:

git branch -lvv | cut -c3- | awk '/: gone]/ {print $1}' | xargs git branch -d

它的作用基本上如下:

  1. 以详细模式(-l)列出所有本地(vv)分支(这几乎与我们之前的输出相似)
  2. cut是每行开头的第一个和第二个字符(空格)
  3. 使用awk过滤"消失了"一个(/: gone]/),并得到他们的第一列({print $1})。记住,"去了"意味着远程跟踪参考不再存在。
  4. 输出(在我们的例子中,是要删除的分支的名称,feature/niceNewFeature)通过git branch -d命令传送到xargs(删除),因此它将删除科。请注意,分支必须在其上游分支中完全合并,因为仅使用-d选项,而不是-D--delete --force)。

答案 1 :(得分:-1)

你这样做:

git remote prune origin

(如果'origin'是你的github遥控器的名字,否则用好名字取代)