当前位置 : 首页 » 互动问答 » 正文

如何在本地和远程删除Git分支?

分类 : 互动问答 | 发布时间 : 2010-01-05 09:12:15 | 评论 : 30 | 浏览 : 6135095 | 喜欢 : 14101

我想在本地和我的远程项目上删除分支GitHub.

尝试删除远程分支失败

 $ git branch -d remotes / origin / bugfix
错误:找不到分支'remotes / origin / bugfix'。

$ git branch -d origin / bugfix
错误:找不到分支'origin / bugfix'。

$ git branch -rd origin / bugfix
删除了远程分支origin / bugfix(2a14ef7)。

$ git push
一切都是最新的

$ git pull
来自github.com:gituser/gitproject
* [新分支] bugfix  - > origin / bugfix
已经是最新的。

我需要做些什么才能成功删除 remotes / origin / bugfix在本地和GitHub上分支?

回答(30)

  • 1楼
  • 执行摘要

     $ git push --delete <remote_name> <branch_name>
    $ git branch -d <branch_name>
    

    请注意,在大多数情况下,远程名称是origin.

    删除本地分支

    要删除local分支,请使用以下方法之一:

     $ git branch -d branch_name
    $ git branch -D branch_name
    

    Note: The -d选项是--delete的别名,只有在已经在其上游分支中完全合并的情况下才会删除该分支。您还可以使用-D,它是 - 删除--force 的别名,它会删除分支“无论其合并状态如何”。 [来源: man git-branch ]

    删除远程分支[更新于2017年9月8日]

    As of Git v1.7.0,您可以使用remote删除

    分支$ git push <remote_name> --delete <branch_name>
    

    可能比

     $ git push <remote_name>更容易记住:<branch_name>
    

    已添加到Git v1.5.0中以删除远程分支或标记。“

    Git v2.8.0开始,您还可以使用git push with the -d选项作为--delete.

    的别名因此,Git的版本你已安装将决定你是否需要使用更简单或更难的语法。

    删除远程分支[原始答案从2010年1月5日]

    来自Scott Chacon的Pro Git第3章:

    删除远程分支

    假设您已完成远程分支 - 例如,您和您的协作者已完成某项功能并已将其合并到您的远程主分支(或您的稳定代码行所在的任何分支)。您可以使用相当钝的语法 git push [remotename]:[branch] 删除远程分支。如果要从服务器删除serverfix分支,请运行以下命令:

     $ git push origin:serverfix
    致git@github.com:schacon/simplegit.git
      -  [删除] serverfix
    

    动臂。您的服务器上没有更多分支。您可能想要熟悉此页面,因为您需要该命令,并且您可能会忘记语法。记住这个命令的一种方法是回忆一下我们之前讨论过的 git push [remotename] [localbranch]:[remotebranch] 语法。如果你放弃 [localbranch] <notranslate > [remotebranch] 部分,那么你基本上就是说:“不要在我这边做任何事情并使其成为,它工作得很漂亮。 Scott Chacon是对的 - 我想要.”

    I issued 然后你应该在其他机器上执行它那个页面(或者通过在Stack Overflow上回答这个问题,实际上是狗耳朵)。dog ear git push origin:bugfix

    git fetch --all --prune

    传播更改。

    to propagate changes.

  • 2楼
  • Matthew的答案非常适合删除remote分支,我也很欣赏这些解释,但是要简单区分这两个命令:

    从您的机器中删除 local branch

    git branch -d {th​​e_local_branch} (use -D强制删除分支而不检查合并状态)

    从服务器中删除远程分支

    git push origin --delete {the_remote_branch}

    Reference: https://makandracards.com/makandra/621-git-delete-a-branch-local-or-remote

  • 3楼
  • 简短答案

    如果您想要更详细地解释以下命令,请参阅下一节中的长答案。

    删除远程分支:

     git push origin --delete <branch> #Git version 1.7.0或更新
    git push origin:<branch> #Git版本早于1.7.0
    

    删除本地分支:

     git branch --delete <branch>
    git branch -d <branch>#Shorter version
    git branch -D <branch>#强制删除未合并的分支
    

    删除本地远程跟踪分支:

     git branch --delete --remotes <remote> / <branch>
    git branch -dr <remote> / <branch>#Shorter
    
    git fetch <remote> --prune#删除多个过时的跟踪分支
    git fetch <remote> -p#Shorter
    

    长答案:有3个不同的分支要删除!

    当您处理本地和远程删除分支时,请记住涉及3个不同的分支:

    1. 本地分支X.
    2. 远程原点分支X.
    3. 跟踪远程分支的本地远程跟踪分支origin/X X.

    Visualization of 3 branches

    使用的原始海报

     git branch -rd origin / bugfix
    

    只删除了他的本地远程跟踪分支 origin / bugfix ,而不是实际的远程分支bugfix on origin.

    Diagram 2

    要删除那个实际的远程分支, you need

     git push origin --delete bugfix
    

    Diagram 3

    其他详细信息

    以下部分介绍了删除远程和远程跟踪分支时要考虑的其他详细信息。

    删除远程分支也会删除远程跟踪分支

    请注意删除远程分支< notranslate>使用X从命令行中删除,所以没有必要用git push git fetch --prune origin/X修剪过时的远程跟踪分支,尽管如果你这样做也不会有害。 git fetch -p or 您可以通过运行以下命令来验证是否也删除了远程跟踪分支也会删除本地远程跟踪分支

    origin/X #View just remote-跟踪分支机构 git branch --remotes git branch -r #严格查看本地和远程跟踪分支 git branch --all git branch -a

    修剪过时的本地远程跟踪分支origin / X 

    如果您没有从命令行删除远程分支

    (如上所述),那么您的本地仓库仍将包含(现在已过时)远程跟踪分支X。例如,如果您通过GitHub的Web界面直接删除远程分支,就会发生这种情况。origin/X删除这些过时的远程跟踪分支的典型方法(因为Git版本1.6.6)只需运行

    注意这一点删除远程git fetch with the --prune or shorter -p. git fetch origin上不再存在的任何远程分支的所有过时的本地远程跟踪分支--prune git fetch origin -p#Shorter :

    以下是来自

    (强调我的)的相关引用:选项,运行取自   许多存储库, 1.6.6发行说明

    选项删除远程跟踪   过时的分支。 --all and --multiple这些使“git远程更新”和“git   远程修剪“不太必要(没有计划删除”遥控器   更新“也不是”远程修剪“,但是)。--prune替代以上自动修剪过时的远程跟踪分支”git fetch“学习

    或者,不要通过

    修剪过时的本地远程跟踪分支,而只需用<手动删除分支< notranslate> git fetch -p git branch --delete --remotes origin / X git branch -dr origin / X#Shorter , git-branch(1)手册页你可以避免进行额外的网络操作--remote or -r flags:

     git-fetch(1)手册页

    See Also

  • 4楼
  • 删除分支的步骤:

    用于删除远程分支:

     git push origin --delete <your_branch>
    

    用于删除本地分支,有三种方法:

     1:git branch -D <branch_name>
    
    2:git branch --delete --force <branch_name> //与-D相同
    
    3:git branch --delete <branch_name> // unmerge错误
    

    Explain:好的,只是解释一下这里发生了什么!

    Simply do git push origin --delete to 只删除你的远程分支,在末尾添加分支的名称,这将删除并同时将其推送到远程...

    Also, git branch -D ,它只删除本地分支ONLY!...

    -D stands for - delete --force 即使它没有合并(强制删除)也会删除分支,但你也可以使用-d它代表--delete,它会抛出分支合并状态的错误...

    我还创建了下面的图像来显示步骤:

    delete a remote and local branch in git

  • 5楼
  • 您还可以使用以下命令删除远程分支。

     git push --delete origin serverfix
    

     git push origin:serverfix相同
    

    但可能更容易记住。

  • 6楼
  • 如果要删除分支,请首先签出除要删除的分支以外的分支。

     git checkout other_than_branch_to_be_deleted
    

    删除本地分支:

     git branch -D branch_to_be_deleted
    

    删除远程分支:

     git push origin --delete branch_to_be_deleted
  • 7楼
  • 提示:使用

    删除分支时,git branch -d <branchname> #deletes local branch
    

    or

     git push origin:<branchname>#删除远程分支
    

    仅删除引用。即使分支在遥控器上实际被删除,对它的引用仍然存在于团队成员的本地存储库中。这意味着对于其他团队成员,当他们执行 git branch时,仍然可以看到已删除的分支-a .

    要解决此问题,您的团队成员可以使用

     git remote prune <repository>修剪已删除的分支。
    

    这通常是 git remote prune origin.

  • 8楼
  • git branch -D <name-of-branch>
    git branch -D -r origin / <name-of-branch>
    git push origin:<name-of-branch>
  • 9楼
  • 这很简单:只需运行以下命令:

    要在本地和远程删除Git分支,首先使用以下命令删除本地分支:

     git branch -d example
    

    (here example是分支名称)

    然后使用命令删除远程分支:

     git push origin:example
  • 10楼
  • 另一种方法是

     git push --prune origin
    

    WARNING: 这将删除本地不存在的所有远程分支。或者更全面地,

     git push --mirror
    

    将有效地使远程存储库看起来像存储库的本地副本(本地磁头,远程控制器和标签在远程上镜像)。

  • 11楼
  • 我在Bash settings:

     alias中使用以下内容git-shoot =“git push origin --delete”
    

    然后你可以打电话:

     git-shoot branchname
  • 12楼
  • 自2013年1月起,GitHub在“分支”页面的每个分支旁边都包含一个删除分支按钮。

    相关博文:创建和删除分支

  • 13楼
  • 如果要使用单个命令完成这两个步骤,可以通过将以下内容添加到〜/ .gitconfig :

     [alias]中来为其创建别名。
        rmbranch =“!f(){git branch -d $ {1} && git push origin --delete $ {1};}; f”
    

    或者,您可以使用

     git config --global alias.rmbranch \从命令行将其添加到全局配置中
    '!f(){git branch -d $ {1} && git push origin --delete $ {1}; };F'
    

    NOTE: If using -d(小写d),只有在合并后才会删除分支。要强制删除,您需要使用-D(大写D)。

  • 14楼
  • 要在本地和远程删除分支

    • Checkout to master branch - git checkout master

    • 删除远程分支 - git push origin --delete <branch-name>

    • 删除本地分支 - git branch --delete <branch-name>

  • 15楼
  • 在本地删除:

    要删除本地分支,可以使用:

     git branch -d branch_name
    

    要强制删除分支,请使用-D instead of -d.

     git branch -D branch_name
    

    远程删除:

    有两个选项:

     git push origin:branchname
    
    git push origin --delete branchname
    

    我建​​议你使用第二种方式,因为它更直观。

  • 16楼
  • 你也可以使用 git remote prune origin :

     $ git remote prune origin
    修剪原产地
    网址:git@example.com/yourrepo.git
     * [修剪]原产地/部分分支机构
    

    它从 git branch -r修剪和删除远程跟踪分支 listing.

  • 17楼
  • 除了其他答案,我经常使用 git_remote_branch 工具。这是一个额外的安装,但它为您提供了一种与远程分支机构进行交互的便捷方式。在这种情况下,要删除:

     grb delete branch
    

    我发现我也经常使用publish and track命令。

  • 18楼
  • 删除分支

    让我们假设我们在分支“联系表单”上的工作已经完成,我们已经将它集成到“master”中。由于我们不再需要它,我们可以删除它(本地):

     $ git branch -d contact-form
    

    并删除远程分支:

     git push origin --delete contact-form
  • 19楼
  • One liner命令delete 本地和远程:

    D = branch-name; git branch -D $ D; git push origin:$ D

    或将以下别名添加到〜/ .gitconfig ; usage: git kill branch-name

     [alias]
        kill =“!f(){git branch -D \”$ 1 \“; git push origin --delete \”$ 1 \“;}; f”
  • 20楼
  • 删除远程分支

    git push origin:<branchname>

    删除本地分支

    git branch -D <branchname>

    删除本地分支步骤:

    1. checkout to another branch
    2. delete local branch
  • 21楼
  • 简单地说:

     git branch -d <branch-name>
    git push origin:<branch-name>
  • 22楼
  • 现在你可以使用 GitHub Desktop app.

    启动应用程序

    1. 点击包含分支的项目
    2. 切换到要删除的分支switching branch
    3. 从“分支”菜单,选择“取消发布...”,从GitHub服务器中删除分支。 unpublish branch
    4. 从“分支”菜单中选择“删除” branch_name“...”,将分支从本地计算机(也就是您当前正在处理的计算机)中删除delete local branch
  • 23楼
  • 要删除本地 - (正常),

     git branch -d my_branch
    

    如果您的分支在重新定位/合并进度并且未正确完成意味着,您将收到错误 Rebase / Merge in progress 所以在这种情况下,您将无法删除您的分支。

    所以要么你需要解决变基/合并,否则你可以使用,

     git branch -D my_branch强制删除
    

    要在Remote中删除:

     git push --delete origin my_branch
    

    可以使用,

     git push origin:my_branch#容易记住两者都会做同样的事情。
    

    图形表示,

    enter image description here

  • 24楼
  • git push origin --delete branchName
    

     git push origin:branchName更容易记住
  • 25楼
  • 如果您的标签与远程分支的名称相同,则无效:

     $ git push origin:branch-or-tag-name
    错误:dst refspec branch-or-tag-name匹配多个。
    错误:未能将某些引用推送到'git@github.com:SomeName / some-repo.git'
    

    在这种情况下,您需要指定要删除分支,而不是标记:

     git push origin:refs / heads / branch-or-tag-name
    

    同样,要删除标记而不是分支,您将使用:

     git push origin:refs / tags / branch-or-tag-name
  • 26楼
  • 我厌倦了谷歌搜索这个答案,所以我采取了类似的方法 to crizCraig发布的答案 earlier.

    在我的Bash配置文件中添加了以下内容:

     function gitdelete(){
        git push origin --delete $ 1
        git branch -D $ 1
    }
    

    然后每次我完成一个分支(例如,合并到master)我在终端中运行以下命令:

     gitdelete my-branch-name
    

    ...然后删除 my-branch-name from origin以及本地。

  • 27楼
  • 许多其他答案将导致错误/警告。这种方法相对简单,虽然你可能仍然需要 git branch -D branch_to_delete ,如果它没有完全合并到 some_other_branch ,例如。

     git checkout some_other_branch
    git push origin:branch_to_delete
    git branch -d branch_to_delete
    

    如果删除了远程分支,则不需要远程修剪。它只用于获取您正在跟踪的回购中最新的遥控器。我观察到git fetch会添加遥控器,而不是删除它们。以下是 git remote prune origin 实际执行某些操作的示例:

    用户A执行上述步骤。用户B将运行以下命令以查看最新的远程分支

     git fetch
    git远程修剪起源
    git branch -r
  • 28楼
  • git push origin:bugfix#删除远程分支
    git branch -d bugfix#必须手动删除本地分支
    

    如果您确定要删除它,请运行

     git branch -D bugfix
    

    现在清理已删除的远程分支运行

     git remote prune origin
  • 29楼
  • 在执行

     git branch --delete <branch>之前
    

    确保首先通过执行确定远程分支的确切名称:

     git ls-remote
    

    这将告诉您输入什么<branch> value. (branch区分大小写!)

  • 30楼
  • 所有其他答案的混搭。需要Ruby 1.9.3+,经过测试only on OS X.

    调用此文件git-remove,使其可执行,并将其放入您的路径中。然后使用,例如, git remove temp .

    #!/ usr / bin / env ruby
    需要'io / console'
    
    如果__FILE__ == $ 0
          branch_name = ARGV [0] if(ARGV [0])
          print“按Y强制删除本地和远程分支#{branch_name} ...”
        response = STDIN.getch
        如果['Y','y','是']。包括?(响应)
          把“\ n继续。”
          `git branch -D#{branch_name}`
          `git branch -D -r origin /#{branch_name}`
          `git push origin --delete#{branch_name}`
        其他
          把“\ nQuitting。”
        结束
    结束

相关阅读:

Why should I use core.autocrlf=true in Git?

Force "git push" to overwrite remote files

Update Git branches from master

Update Git branches from master

Undo a Git merge that hasn't been pushed yet

How can I delete a file from git repo?

Git fetch remote branch

Git fetch remote branch

How do you clone a Git repository into a specific folder?

Reset or revert a specific file to a specific revision using Git?