我使用以下方法将我的整个GitHub存储库克隆到本地计算机上
git clone git@github.com:my_account_name/my_repository_name.git
假设我在远程存储库上的分支是foo
和bar
。当我这样做时:
git branch -r
存储在本地计算机上的远程分支列出了名称:
origin/foo
origin/bar
(对于git branch -a
,它们会显示remotes/
进一步加前缀。)当我在本地计算机上的分支上工作时,我想引用没有origin/
前缀的分支。对于每个分支,我可能会这样做:
git branch -m origin/foo foo
重命名分支,但实际上我有很多分支,并且不想一个接一个地手动执行。有没有办法一次性删除本地计算机上多个远程分支的这些origin/
(或remotes/origin/
)前缀?
答案 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中,分支或标记名称(如master
或v1.1
)是Git提供的设备,可让您为(一个,一个)哈希ID分配一个人类可读的名称。这些哈希ID通常是提交的ID。 (标签会发生正常异常,标签可以命名标签对象,然后命名提交;这就是Git实现带注释标签的方式。)
使(本地)分支机构名称与众不同的是,它们具有您可以通过运行带有分支名称的git checkout
来获取它们的唯一属性。完成后,git status
会说on branch master
之类的内容。而且 - 这是真正的特殊技巧 - 如果您现在进行新提交,Git将自动存储新提交的哈希当前分支机构名称中的ID,即您在&#34; on&#34;上的ID。
作为另一个特殊技巧,如果你告诉Git继续使用某个分支名称B
,并且当前的分支名称B
不存在,Git将扫描你的集合远程跟踪名称,例如origin/master
和origin/B
。如果它找到恰好一个这样的名字,它将:
B
origin/B
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/B
与origin
处的Git同步,然后将B
与origin/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 --list
与grep
结合使用,以获取要删除的分支的名称:
git branch -r --format '%(refname:lstrip=2)' | grep 'foo*' | xargs git remote -d -r
将'foo*'
替换为您需要的任何通配符,以匹配所需的分支名称。
详细了解git branch
,git checkout
,grep
和xargs
。