我也不想偶然检查一个特定的分支

时间:2019-04-13 06:23:09

标签: git

我有一个具有两个根提交的存储库,几乎不使用旧分支,但是如果我出于习惯不小心将其签出,则它将永久运行以检查是否破坏了它,然后留下一个需要在可用之前进行重置。

如何告诉git不要签出分支A?它在本地不存在,它是从原点/ A自动创建的。那么,如何在结帐-b时停止自动创建?设置

[branch "A"]
  remote = fubar

没有帮助。

2 个答案:

答案 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/foofoo

    您可以拥有多个遥控器。实际上,即使对于单个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