删除它们在远程回购后删除本地的Git分支删除它们在远程回购后删除本地的Git分支(Delete lo

2019-05-12 12:15发布

我想总有我的本地和远程存储库同步分行的条款。

在GitHub上拉入请求审查后,我合并有删除我的分支(远程)。 我怎么能在我的本地库获取该信息,并得到GIT中删除我的分支的本地版本呢?

Answer 1:

快捷方式

git branch --merged | grep -v "\*" | xargs -n 1 git branch -d

注意:如果你不是master ,这有删除分支的潜力。 请继续阅读的“更好的方式”。

确保我们保持主

你可以确保master ,或任何其他分支就此而言,不通过删除得到grep ING更多。 在这种情况下,你会去:

git branch --merged | grep -v "\*" | grep -v "YOUR_BRANCH_TO_KEEP" | xargs -n 1 git branch -d

因此,如果我们想保住masterdevelopstaging例如,我们会去:

git branch --merged | grep -v "\*" | grep -Ev "(\*|master|develop|staging)" | xargs -n 1 git branch -d

使这是一个别名

因为它是一个有点长,你可能要一个别名添加到您的.zshrc.bashrc 。 矿被称为gbpurge (为git branches purge ):

alias gbpurge='git branch --merged | grep -Ev "(\*|master|develop|staging)" | xargs -n 1 git branch -d'

然后刷新你.bashrc.zshrc

. ~/.bashrc

要么

. ~/.zshrc


Answer 2:

我用GitHub上的相同的流量,并没有找到以前的答案满足我,因为git branch --merged列出了被合并的分支,但不是他们的每一个在我的情况下远程删除。 所以,这个工作对我来说:

git fetch --all -p; git branch -vv | grep ": gone]" | awk '{ print $1 }' | xargs -n 1 git branch -d

哪里:

  • git fetch --all -p :更新本地分支机构状态
  • git branch -vv :列表地方分支机构状态
  • grep ": gone]" :过滤器删除的
  • awk '{ print $1 }'提取他们的名字
  • xargs -n 1 git branch -d :通过名称delete命令

注意:如果你愿意,你可以使用-D代替-d,它强制删除。

例如:

someUsr@someHost:~/repo$ git branch -a
basic-testing
integration-for-tests
* master
origin
playground-for-tests
test-services
remotes/origin/HEAD -> origin/master
remotes/origin/basic-testing
remotes/origin/master
remotes/origin/test-services

someUsr@someHost:~/repo$ git fetch --all -p; git branch -vv | grep ": gone]" | awk '{ print $1 }' | xargs -n 1 git branch -d
Fetching origin
Deleted branch integration-for-tests (was fbc609a).
Deleted branch playground-for-tests (was 584b900).

someUsr@someHost:~/repo$ git branch -a
basic-testing
* master
origin
test-services
remotes/origin/HEAD -> origin/master
remotes/origin/basic-testing
remotes/origin/master
remotes/origin/test-services

参考:

http://git-scm.com/book/en/v2/Git-Branching-Remote-Branches



Answer 3:

尝试:

git pull --prune

这会删除您当地的分行,如果相应的远程分支被删除。

更新:

上面的说法是不正确的那个。

事实上,运行git pull --prune 只会删除远程跟踪分支诸如此类

remotes/origin/fff
remotes/origin/dev
remotes/origin/master

然后,你可以运行git branch -r检查远程跟踪分支留下您的机器上。 假设左分支是:

origin/dev
origin/master

这意味着分支origin/fff被删除。

因此,在运行后git pull --prune ,只需要运行:

git branch --merged | grep -vFf <(git branch -r | cut -d'/' -f2-)

你可以找到所有的地方分支机构,其中:

  1. 没有任何更多correspoding远程分支机构;
  2. 可以安全地取出。

然后, <the command above> | xargs git branch -d <the command above> | xargs git branch -d可以删除它们。



Answer 4:

这应该努力避免删除与接受的解决方案的 开发分支:

git branch --merged | egrep -v "^\*|master|development" | xargs -n 1 git branch -d


Answer 5:

对于使用PowerShell的人来说,这是相当于答案以上 :

git branch -vv | Select-String -Pattern ': gone]' | ForEach-Object{($_ -split "\s+")[1]} | %{ git branch -D $_ }
  1. 过滤所有标记为走了枝头
  2. 呼叫git branch -D在每个发现分支


Answer 6:

很简单的解决办法:删除您的本地回购,并重新克隆远程之一。 似乎不是很优雅,但它很简单,你就会明白你没有阅读手册页:-)做什么。



Answer 7:

这一切都不是为我工作。 :你可以在这里看到我的其他答案https://stackoverflow.com/a/34969726/550454

但本质上,我现在有这在我的~/.gitconfig

[alias]
  prune-branches = !git remote prune origin && git branch -vv | grep ': gone]' | awk '{print $1}' | xargs -r git branch -d


Answer 8:

我已经写了这一个班轮列出不具有相应的远程分支的所有地方分公司:

diff -u <(git branch|sed 's/..//') <(git branch -r|sed 's/..origin\///')|tail -n +4|sed -n "s/^-//p" -

在此之后完成,删除这些地方分支机构很容易与xargs

diff -u <(git branch|sed 's/..//') <(git branch -r|sed 's/..origin\///')|tail -n +4|sed -n "s/^-//p" -|xargs -r git branch -d


Answer 9:

我只是做删除合并本地分支:

git branch -d $(git branch --merged)

而如果你想删除不存在漏电痕迹太:

git pull --prune


Answer 10:

在你刚刚推合并你的分支掌握的情况,然后做的git bash中执行以下操作:

git branch -d branch_name_to_delete

如果您在该分支目前是将你推回主。 在这一点上做一个拉带

git pull


Answer 11:

该投票的回答也必须删除主的潜力。 Consdier以下实际例子。

我有这被合并到开发,然后两个特征分支hemen_README和hemen_BASEBOX发展并入高手。 该功能分支hemen_README和hemen_BASEBOX被远程删除,但仍显示本地的。 另外我不是高手本地,但在发展。

在这种情况下

    hemen@hemen-MXC061:~/data/projects/vagrant-webdev$ git branch -v -a
    * develop                      671ad6c Merged in hemen_README (pull request #1)
        hemen_BASEBOX                a535c0f added global exec paths to puppet manifest
        hemen_README                 ba87489 Updated Readme with considerable details
        master                       8980894 [behind 7] Initial Vagrantfile, works for vagrant up. Also initial .gitignore
        remotes/origin/develop       671ad6c Merged in hemen_README (pull request #1)
        remotes/origin/hemen_BASEBOX a535c0f added global exec paths to puppet manifest
        remotes/origin/hemen_README  ba87489 Updated Readme with considerable details
        remotes/origin/master        2f093ce Merged in develop (pull request #3)

所以,如果我运行上面部分命令

    hemen@hemen-MXC061:~/data/projects/vagrant-webdev$ git branch --merged | grep -v "\*"
        hemen_BASEBOX
        hemen_README
        master

请注意,它显示了高手太多,最终被删除。

在任何情况下,我能做到这一点。 我与你我如何实现了分享我的会话日志。

    hemen@hemen-MXC061:~/data/projects/vagrant-webdev$ git remote prune origin --dry-run
    Pruning origin
    URL: git@bitbucket.org:hemenkapadiapublic/vagrant-webdev.git
     * [would prune] origin/hemen_BASEBOX
     * [would prune] origin/hemen_README
    hemen@hemen-MXC061:~/data/projects/vagrant-webdev$ git remote prune origin 
    Pruning origin
    URL: git@bitbucket.org:hemenkapadiapublic/vagrant-webdev.git
     * [pruned] origin/hemen_BASEBOX
     * [pruned] origin/hemen_README

我只是检查whay将被修剪,然后修剪它。 看着分支命令下面我们采取了遥控器的护理

    hemen@hemen-MXC061:~/data/projects/vagrant-webdev$ git branch -v -a
    * develop                671ad6c Merged in hemen_README (pull request #1)
        hemen_BASEBOX          a535c0f added global exec paths to puppet manifest
        hemen_README           ba87489 Updated Readme with considerable details
        master                 8980894 [behind 7] Initial Vagrantfile, works for vagrant up. Also initial .gitignore
        remotes/origin/develop 671ad6c Merged in hemen_README (pull request #1)
        remotes/origin/master  2f093ce Merged in develop (pull request #3)

现在继续和删除本地分行

    hemen@hemen-MXC061:~/data/projects/vagrant-webdev$ git branch -d hemen_BASEBOX 
    Deleted branch hemen_BASEBOX (was a535c0f).
    hemen@hemen-MXC061:~/data/projects/vagrant-webdev$ git branch -d hemen_README
    Deleted branch hemen_README (was ba87489).

现在好了分支机构是否合适。

    hemen@hemen-MXC061:~/data/projects/vagrant-webdev$ git branch -v -a
    * develop                671ad6c Merged in hemen_README (pull request #1)
        master                 8980894 [behind 7] Initial Vagrantfile, works for vagrant up. Also initial .gitignore
        remotes/origin/develop 671ad6c Merged in hemen_README (pull request #1)
        remotes/origin/master  2f093ce Merged in develop (pull request #3)


文章来源: Delete local Git branches after deleting them on the remote repo