所以我的遥控器上有一个名为 feature1 的分支。我尝试创建一个本地分支来跟踪此问题:
git checkout -b origin/feature1
但是现在
git branch
向我展示了这个:
master
*origin/feature1
我知道这是不对的。应该只是本地的
feature1
,而不是 origin/feature1
。
如何在保持远程分支完好无损的情况下删除它,并正确设置它?我做错了什么?
列出所有分支
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
你的命令应该是:
git checkout -b feature1 origin/feature1
其中表示“签出并创建分支
feature1
,并让它跟踪origin/feature1
”。您所做的是创建一个字面名为 origin/feature1
的分支,它不跟踪任何远程分支。
要修复它,请切换到另一个分支:
git checkout master
然后删除它:
git branch -d origin/feature1
您在这里所做的是创建一个名为
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/
事)。
如果您运行
git branch -a
,除了常规本地分支之外,您还会看到远程跟踪分支。
要从本地存储库中删除这些远程跟踪分支之一,请将
--remote
标志添加到 git branch -d
:
git branch --remote -d origin/random-remote-tracking-branch
请注意,此远程跟踪分支可能会在您下次运行
git pull
或 git fetch
时立即返回,除非您也将其从远程存储库中删除。