代码之家  ›  专栏  ›  技术社区  ›  Sandra K

远程存在时“checkout”和“checkout-b”之间的区别?

  •  -1
  • Sandra K  · 技术社区  · 8 年前

    git checkout MyRemoteBranch 它会很好的工作。我的意思是它将创建一个名为MyRemoteBranch的本地分支并切换到它,这个本地分支将跟踪远程分支。

    在这种情况下,我什么时候才能通过考试 -b

    git checkout MyRemoteBranch
    

    与

    git checkout -b MyRemoteBranch
    
    4 回复  |  直到 8 年前
        1
  •  1
  •   torek    8 年前

    Caleb's answer 是正确的(我投了更高的票),但这里是更精确的表示法:

    • git checkout -b name name ,使用当前(头)提交作为新分支的哈希ID。如果分支名称已存在,则此操作失败。

    • git checkout name 尝试使用名称签出现有分支 .

      • 如果失败是因为 名称 如果不存在,则继续进行第二步,Git文档有时称之为“DWIM”模式: 照我说的做 .

      • origin/ name , upstream/ name upstream ,等等。如果 匹配时,它执行等效于:

        git checkout -b name remote-tracking-name

        如你所见,它比原来的多了一个论点 -b

    • git checkout -b name commit-specifier 如果愿意,您可以手动调用它,但DWIM模式会为您调用它,并尝试创建新的分支名称 名称 ,使用给定的 commit-specifier 作为新分支的哈希ID。如果名称存在,则此操作失败 git checkout 那个特定的提交哈希ID(看到了吗 Checkout another branch when there are uncommitted changes on the current branch 有关何时可以或无法切换到其他提交的详细信息。)

    • 为了完整性,我们还应该提到 git checkout --track remote-tracking name ,例如。, git checkout --track upstream/develop develop ,好像你要跑似的 git checkout -b develop upstream/develop 不 发展 现在,但是 有 二者都 origin/develop 和 upstream/develop . DWIM模式无法工作,因为 git checkout develop 不知道该不该用 起源/发展 上游/开发 .

        2
  •  2
  •   Caleb    8 年前

    不同的是如果你通过考试 -b git 创建 新的 分支的名称,并基于创建该分支时所处的分支。没有国旗, 吉特 将查找现有分支,包括您正在跟踪的任何远程回购中的分支,如果找到分支,则切换到其中一个分支。

    那么,假设:1)你现在在自己的分支中,名为 foo upstream bar . 如果你说:

    git checkout bar
    

    然后切换到 福 上游 (假设你的回购已经知道 福 因为你最近做了一个 git fetch

    git diff upstream/bar
    

    然后 吉特 不会报告任何差异。

    但是,如果你给

    git checkout -b bar
    

    然后 将创建一个 新的 碰巧也被命名为 酒吧 ,但其内容将与 福

    将报告 上游 的 酒吧 分支机构和您当地的 酒吧 分支(同样,它从您的 福

    你自己试试这个很容易。只需选择两个本地不存在的现有远程分支,例如 upstream/branch1 和 upstream/branch2 在你的遥控器上你知道有些不同。验证是否与 git diff upstream/branch1 upstream/branch2 -b类 标志:

     git checkout branch1
    

    branch1 . 再次检查是否与上游版本匹配: git diff upstream/branch1 branch1 . 应该没有区别。下一步,尝试创建 branch2 使用 -b类 标志:

     git checkout -b branch2
    

    现在你应该有一个本地的 ,但它应该匹配 还有 上游/分支1 . 验证:

     git diff upstream/branch1 branch2      # should be no diffs
     git diff upstream/branch2 branch2      # should be like diffing branch1 and upstream/branch2
    
        3
  •  0
  •   Ramiro Vargas    8 年前

    git checkout MyRemoteBranch 此分支何时已在远程存储库中

    git checkout -b MyRemoteBranch 使用这个-b,您可以在本地创建一个新分支,不管它是否在远程

        4
  •  0
  •   Azkar Moulana    8 年前

    当你使用

    git checkout myRemoteBrench
    

    它只在分支已经存在的情况下切换您的分支。

    但是当你使用

    git checkout -b myRemoteBranch
    

    首先它检查所提到的分支是否存在,如果不存在,它用给定的名称创建一个新分支并切换到它。

    推荐文章