Git 中的远程分支如何或何时创建本地分支?执行相同操作所需的命令

How or rather when does a local branch get created from a remote branch in Git ? commands required to do the same

tried creating a branch from the gitab gui and used the following commands

>>git pull origin remote_branch_name
>>git checkout   remote_branch_name

没有工作 -> 当我使用命令 git 分支时没有得到远程分支名称。 还想知道如何创建远程分支以及使用命令行从远程分支创建本地分支的整个过程?

分支创建(远程与本地)

OP: How or rather when does a local branch get created from a remote branch in Git?

每当以下情况时都会创建一个本地分支:

  • 在您的本地存储库中签出(切换到)远程分支
  • 在本地创建了一个新分支(远程上不存在)

在上面的示例中,远程存储库已被克隆,并且整个存储库包括唯一可用的分支(master)已通过 o/master 镜像到本地;它还自动创建了一个本地 master 分支来跟踪它的远程计数器部分。每当克隆新存储库时,默认分支都会自动发生这种情况。

另请注意分支 super-cool-feature,它当前在本地签出,但远程尚不存在。要远程发布分支,必须先推送它。

切换到现有的远程分支

$ git switch branch_name

正在创建一个新的本地分支(并自动切换到它)

$ git switch --create=branch_name

远程发布本地分支

$ git push --set-upstream origin branch_name

来源: 上面的例子是借用这个blog.

执行以下步骤:

  1. 找出您拥有的 Git 版本。 运行git --version。如果它早于 Git 2.0,请尽可能更新它。理想情况下,它应该高于 2.17 左右(以避免各种错误;一般来说,越新越好,尽管有,例如,最近引入了一些新的 git stash 错误,这些错误仍在被压缩,所以它不是 总是最好有最新Git版本。

  2. 通过 运行ning:

    了解您当前的存储库是否是 单分支存储库
    git config --get remote.origin.fetch
    

    (注意:这假定您的遥控器名为 origin。这是标准名称;它是您在 git pull origin remote_branch_name 命令中显示的名称。)此 应该 打印:

    +refs/heads/*:refs/remotes/origin/*
    

    如果它打印出类似 +refs/heads/master:refs/remotes/origin/master 的内容,则您有一个 单分支克隆 (在这种情况下,单分支是 master ).参见 How do I "undo" a --single-branch clone? 或 运行:

    git remote set-branches origin "*"
    

    修复它。 (如果它打印出预期的正常内容,则您无需在此处执行任何操作。)

  3. 运行:

    git fetch --prune origin
    

    不要运行git pull。不要输入分支名称。只需 运行 git fetchgit fetch origin,最好使用 --prune(尽管 p运行e 部分是可选的)。

    这里显式的origin表示origin中获取。如果没有名称,Git 会计算出使用哪个 遥控器 ,如果您有多个遥控器,则可以从其他遥控器而不是 origin 获取。您几乎可以肯定只有 一个 遥控器,名为 origin,因此毫无疑问要使用 哪个 遥控器。使用 git remote -v 列出您拥有的遥控器组;它将为每个遥控器打印一对行。

  4. 运行 git branch -r 列出 git fetch origin --prune 留下的 远程跟踪名称 。这些源自 分支 名称,您的 Git 可以 自动创建 ,如果您还没有它们的话。例如,在我 Git 的 Git 存储库的 Git 克隆中,我得到:

    $ git branch -r
      origin/HEAD -> origin/master
      origin/main
      origin/maint
      origin/master
      origin/next
      origin/seen
      origin/todo
    

    这意味着我可以轻松创建一个名为 todo 的分支。

  5. 要从这些远程跟踪名称之一创建新的本地分支,运行:

    git switch <name>
    

    (填写 name 部分,删除尖括号 <>,使用远程跟踪名称,去掉 origin/ 部分)。如果您的 Git 早于 2.23,请使用:

    git checkout <name>
    

    得到同样的效果。这会告诉您的 Git 使用 guess 模式,Git 以前称为 DWIM 模式: 如果您不这样做已经有一个同名的分支,Git 将猜测 你的意思是根据远程跟踪名称创建一个新的本地分支。

如果由于某种原因 --guess 模式不起作用——例如,如果您在自己的 Git 配置中禁用了它,您可以在某些最新版本的 [=228] 中禁用它=]—你总是可以更明确。例如,如果有一个 origin/feature/short 并且您希望基于 origin/feature/short 创建 feature/short,运行:

git switch --track origin/feature/short

您的 Git 知道 origin/feature/short 是一个 远程跟踪名称 (因为它被发现是一个,被 git fetch origin 留下较早的)并且 --track 表示:通过删除 origin/ 部分将此远程跟踪名称转换为分支名称,然后创建该分支名称,指向正确的提交。 这与 --guess 选项(默认为“on”)的技巧相同,除了它不是在说“没有这样的分支”之前的最后一分钟才这样做,Git 会 并且不必 猜测 .


Would also like to know how to create a remote branch ...

从某种意义上说,你不能这样做。假设您有一个兄弟或朋友名叫弗雷德。你告诉弗雷德:换衬衫!你穿的那件有一个大洞! 如果 Fred 换了他的衬衫, make 他换了吗?如果你的回答是“是的,我他那样做”,那么你就可以创建一个远程分支。如果是“不,他选择这样做,我只是先问过他”,那么你不能创建远程分支。

A remote 是其他一些 Git 存储库。您从 您的 Git 存储库连接到的每个遥控器都有一个名称。第一个遥控器的标准名称是 origin(就像你兄弟的标准名称是 Fred 一样)。您实际上并没有创建远程分支。你只是要求或告诉一些远程,比如 origin,来创建一个分支。他——我们在这里假设 origin 是一个男人,或者至少是男性代词——要么按照你的要求去做,要么不做。

所以更精确的问题是:我如何要求远程存储库创建分支名称?答案是:你运行 git push.

当你 运行:

git push origin my-branch-name:his-branch-name

或:

git push origin one-branch-name

您正在指示您的 Git 软件通过您的名字 origin 调用其他 Git 存储库。另一个 Git 存储库将由其他 Git 软件更新(或不更新),独立于 您的 Git 存储库存在。他有 他自己的 分支名称,每个分支名称都存储一个提交哈希 ID。他存储提交。您的 Git 存储提交并使用 您的 分支名称查找它们。你现在让你的 Git 向他的 Git 发送任何你有的、他没有的、他需要的提交,然后你的 git push 以礼貌的请求结束:请,如果可以,请创建或更新您的分支名称________(填空)以指向提交哈希ID ________(填空)。

你的 Git 用 my-branch-name:his-branch-name 对中的分支名称在 第一个 空白处填写。如果您使用 git push origin one-branch-name 语法,您的 Git 会用 one-branch-name 填充 第一个 空白。也就是说,你和他将使用相同的分支名称。

你的 Git 用 你的 分支名称的哈希 ID 填充 第二个 空白——提交哈希 ID ,即来自对的 my-branch-name 部分。如果您使用 one-branch-name 语法,您的 Git 将使用您的名字 one-branch-name.

中的哈希 ID 填充 second 空白

不管怎样,您现在已经要求他—origin—在他的 存储库中创建或更新分支名称。他要么服从,要么不服从。此时你无法直接控制他是否会服从。 (如果您“拥有”另一个 Git 存储库——例如,如果它在 GitHub 上,但您是 GitHub 存储库的所有者——您可以在更早的时间, 登录 到 GitWeb 上的 Hub 并设置您自己的权限 以确定您以后 git push 是否会服从。但这与您的 git push 操作是分开的。)

如果此分支名称是 origin 的新名称,您的请求是 创建 分支名称。如果他服从,则您已经在另一个 Git 存储库中创建或至少导致创建了相应的分支名称。是否要称其为“创建远程分支”取决于您,但从技术意义上讲,您真正做的是发送一个 请求。他——Git 和 origin 的存储库——决定是否服从 请求。所以它总是需要至少一点合作。