我有一个具有两个根提交的存储库,几乎不使用旧分支,但是如果我出于习惯不小心将其签出,则它将永久运行以检查是否破坏了它,然后留下一个需要在可用之前进行重置。
如何告诉git不要签出分支A?它在本地不存在,它是从原点/ A自动创建的。那么,如何在结帐-b时停止自动创建?设置
[branch "A"]
remote = fubar
没有帮助。
答案 0 :(得分:4)
运行时:
git checkout foo
和分支foo
不存在,但分支origin/foo
存在,Git检出origin/foo
指向的提交,然后创建{{1} },将foo
设置为origin/foo
的上游,指向同一提交。这称为 DWIM模式,用于执行我的意思:Git假定您 meant 键入:
foo
,并以某种方式不小心遗漏了git checkout --track origin/foo
部分。
Git无法完全禁用此DWIM模式。但是在总共三种情况下,DWIM要么不被触发,要么不能被触发。这些是:
分支--track origin/
已存在,指向某些提交。由于您的分支名称是您的您的,因此您可以仅创建一个名为foo
的分支,以便存在foo
。选择一些它应该指向的提交,然后创建它:
foo
(当然,假设branch foo a123456
是有效的提交)。现在a123456
将切换您提交git checkout foo
并分支a123456
。
分支foo
不存在,但foo
也不存在。没有origin/foo
远程跟踪名称可作为origin/foo
的参数提供。现在git checkout --track origin/foo
只会失败。
您的远程跟踪名称是您的 ,因此您可以简单地删除git checkout foo
,但这很麻烦。删除很容易:
origin/foo
现在不见了!不幸的是,只要git branch -r -d origin/foo
上的Git有一个名为git fetch
的分支,运行origin
就会把它带回来,因为您已经无意间告诉了Git;这是默认设置,即每次运行foo
到远程origin/*
时,您的Git都应强制更新或重新创建所有origin
的名称,以匹配git fetch
的分支名称。 。这意味着要使删除杆持久化,您必须说服origin
上的Git删除分支origin
。
这是可能的,甚至可能很容易。这可能是您应该在此处执行的操作。但是起源的Git并不是您的Git,我无法告诉您这是否适合于其他人的Git。您必须自己找到或解决这个问题。
最后,如果存在两个或更多可能的foo
,则DWIM模式 失败。也就是说,foo
变成了git checkout foo
,但这样做只是因为 ,因为它列出了 all 您的远程跟踪名称,这是唯一一个类似于git checkout --track origin/foo
是foo
。
您可以拥有多个遥控器。实际上,即使对于单个Git存储库,您也可以拥有多个远程服务器。因此,您只需添加第二个遥控器即可:
origin/foo
其中git remote add origin2 <url>
是您用于<url>
的URL,然后运行origin
。现在,您不仅将拥有git fetch
,而且还将拥有origin/foo
,并且origin2/foo
将不知道DWIM的哪个,所以您将不知道。
此处的缺点是,这还会导致所有 other DWIM git checkout foo
操作失败。如果那不打扰您,您可以在这里停止。如果是这样,则可以对其进行修复:您可以通过更改git checkout
的设置,将origin2
设置为单分支跟踪器。您可以在创建额外的遥控器后通过编辑origin2
来执行此操作,也可以 在创建.git/config
时使用以下方法来实现:
origin2
,因此git remote add origin2 <url> -t foo
是单分支跟踪程序。现在,您将只有origin2
,没有origin2/foo
,没有origin2/master
,也没有其他类似的名称。
答案 1 :(得分:0)
您可以创建分支的别名。可以使用下面提到的命令:
git symbolic-ref refs/heads/branch1 refs/heads/branch2
所以在这里,只要您尝试结帐到 branch1 ,您就可以进入 branch2 。