删除本地“远程分支”而不删除远程分支?

问题描述 投票:0回答:5

所以我的遥控器上有一个名为 feature1 的分支。我尝试创建一个本地分支来跟踪此问题:

git checkout -b origin/feature1

但是现在

git branch
向我展示了这个:

master    
*origin/feature1

我知道这是不对的。应该只是本地的

feature1
,而不是
origin/feature1

如何在保持远程分支完好无损的情况下删除它,并正确设置它?我做错了什么?

git
5个回答
3
投票

列出所有分支

git branch

-d/-D

删除本地分支..

git branch -d branchName

无论合并状态如何都删除分支

git branch -D branchName

删除远程分支

git push origin --delete branchName

-d 标志:

这将删除本地分支。但它会考虑 git 状态。即,您必须首先提交所有更改。

-D 标志:

这会强制 git 删除本地分支,无论当前您尚未暂存或提交的更改如何。基本上两者都会做

--delete --force

推--删除:

要删除远程分支,您不能使用分支(当使用 -d/-D 标志时,您将其与 branch 命令一起使用)。您需要推送它,而不是包括远程名称(在本例中为来源)。

要获取原始名称,请运行

git remote

2
投票

你的命令应该是:

git checkout -b feature1 origin/feature1

其中表示“签出并创建分支

feature1
,并让它跟踪
origin/feature1
”。您所做的是创建一个字面名为
origin/feature1
的分支,它不跟踪任何远程分支。

要修复它,请切换到另一个分支:

git checkout master

然后删除它:

git branch -d origin/feature1

2
投票

您在这里所做的是创建一个名为

origin/feature1
的普通本地分支。 Git 对此非常满意——在内部,它的名称是
refs/heads/origin/feature1
,这清楚地表明它是一个普通的本地分支——尽管这让用户非常困惑,因为他们认为它看起来像一个远程跟踪分支。

正如Rob已经回答了,您可以简单地删除具有虚假名称的本地分支。 或者,您可以重命名它,这样就不必先删除它:

$ git branch
  master
* origin/feature1
$ git branch -m feature1
$ git branch
  master
* feature1

请注意,实际的远程分支具有以

refs/remotes/
开头的完整内部名称,您可以运行
git symbolic-ref HEAD
来查看当前分支的完整内部名称(如果您了解
refs/heads/
refs/remotes/
事)。


1
投票

删除分支就这么简单:

git branch -D <branch name>

但是您也可以重命名旧的:

我知道这是不对的。它应该只是本地的feature1,而不是origin/feature1。

git branch -m <new_name>

这是所有命令的完整屏幕截图

enter image description here


0
投票

如果您运行

git branch -a
,除了常规本地分支之外,您还会看到远程跟踪分支。

要从本地存储库中删除这些远程跟踪分支之一,请将

--remote
标志添加到
git branch -d

git branch --remote -d origin/random-remote-tracking-branch

请注意,此远程跟踪分支可能会在您下次运行

git pull
git fetch
时立即返回,除非您也将其从远程存储库中删除。

© www.soinside.com 2019 - 2024. All rights reserved.