从分支中删除存储库名称前缀

时间:2017-10-27 05:46:10

标签: git github

我使用以下方法将我的整个GitHub存储库克隆到本地计算机上

git clone git@github.com:my_account_name/my_repository_name.git

假设我在远程存储库上的分支是foobar。当我这样做时:

git branch -r

存储在本地计算机上的远程分支列出了名称:

origin/foo
origin/bar

(对于git branch -a,它们会显示remotes/进一步加前缀。)当我在本地计算机上的分支上工作时,我想引用没有origin/前缀的分支。对于每个分支,我可能会这样做:

git branch -m origin/foo foo

重命名分支,但实际上我有很多分支,并且不想一个接一个地手动执行。有没有办法一次性删除本地计算机上多个远程分支的这些origin/(或remotes/origin/)前缀?

4 个答案:

答案 0 :(得分:4)

origin/*。就是这样。

您不应该在origin/分支中重命名或工作,它们会跟踪远程存储库的状态。您不能直接使用它们,而是创建本地副本。

签出一个本地不存在但远程存在的分支会自动为您创建此分支,因此只需进行结账但省略 <div ng-repeat="e in AllEntities | customArray:SelectedEntities:'id'">{{ e.label }}</div> 部分。

答案 1 :(得分:3)

简短的回答是&#34;不,你甚至不应该尝试#34;。

远程跟踪分支名称不是分支,尽管名称为&#34;远程跟踪分支名称&#34;。相反,它是你Git对某些其他 Git的分支名称的记忆。这有几个目的,包括从这些远程跟踪名称创建自己的分支名称​​的能力。

在Git中,分支或标记名称(如masterv1.1)是Git提供的设备,可让您为(一个,一个)哈希ID分配一个人类可读的名称。这些哈希ID通常是提交的ID。 (标签会发生正常异常,标签可以命名标签对象,然后命名提交;这就是Git实现带注释标签的方式。)

使(本地)分支机构名称与众不同的是,它们具有您可以通过运行带有分支名称的git checkout来获取它们的唯一属性。完成后,git status会说on branch master之类的内容。而且 - 这是真正的特殊技巧 - 如果您现在进行提交,Git将自动存储新提交的哈希当前分支机构名称中的ID,即您在&#34; on&#34;上的ID。

作为另一个特殊技巧,如果你告诉Git继续使用某个分支名称B,并且当前的分支名称B不存在,Git将扫描你的集合远程跟踪名称,例如origin/masterorigin/B。如果它找到恰好一个这样的名字,它将:

  • 创建新名称B
  • 指向与origin/B
  • 相同的提交
  • 并设置为 track origin/B

(这些术语特别不幸:本地分支名称&#34;跟踪&#34;远程跟踪&#34;分支名称,根据远程命名,然而这些东西中的每一个都是本地的!)。

每次运行git fetch origin时,您的Git会在与名为origin远程关联的网址上调用另一个Git。另一个Git告诉你的Git它现在有哪些分支名称,以及哪些提交ID与这些名称一起使用。你的Git下载任何新的提交,并且此时更新你的远程跟踪名称以匹配他们的名字,更新你Git在那里的Git记忆。因此,即使您确实设法对远程跟踪名称执行某些操作,您也会在每个git fetch上消除所有工作。

请注意,一旦你有一个名为B的分支,它就完全独立于你的origin/B,除非你指示你的Git做一些与之重新同步的事情。你的origin/B。您可以在git fetch之后执行此操作,首先origin/Borigin处的Git同步,然后将Borigin/B同步。

(Git提供两步&#34;同步,然后再次同步&#34;作为便利命令,git pull,但对于任何以Git开头的人,我建议避免使用此命令 - 它做得太多了,有时很糟糕;当某些事情失败时,它会让你陷入困境,你无法恢复,因为你不知道哪一步失败了,无法阅读正确的文件,这是特定的步骤!)< / p>

答案 2 :(得分:0)

您可以在checkout期间重命名您的brach并使用如下别名:

cb = !sh -c 'git checkout -b $1 origin/$1' -

之后,您将能够运行如下命令:

git cb foo
git cb bar

答案 3 :(得分:0)

他们是远程分支机构。他们需要origin/前缀,它告诉远程仓库他们所属的位置。

在本地存储库上,您需要创建本地分支以跟踪远程分支。有几种方法可以做到:

git branch foo origin/foo

创建指向远程分支foo(远程仓库origin/foo上的分支foo)指向的提交的本地分支origin

如果您想开始使用foo,那么您必须git checkout foo。但是你可以只在一个命令中组合这两个命令:

git checkout -b foo

如果只有一个名为foo的远程分支,git checkout标识它(它是origin/foo)并在内部运行上面列出的前两个命令的等价物。< / p>

如果您不需要所有远程分支,您可以使用以下方法逐个删除它们:

git remote -d -r origin/foo

-d是&#34;删除&#34;,-r告诉它分支是远程分支。

您可以一次删除多个分支,但它不接受通配符。但是,您可以将git branch --listgrep结合使用,以获取要删除的分支的名称:

git branch -r --format '%(refname:lstrip=2)' | grep 'foo*' | xargs git remote -d -r

'foo*'替换为您需要的任何通配符,以匹配所需的分支名称。

详细了解git branchgit checkoutgrepxargs