gpt4 book ai didi

git - 从中央仓库创建本地分支的标准方法是什么?

转载 作者:太空狗 更新时间:2023-10-29 14:43:54 25 4
gpt4 key购买 nike

假设中央回购协议有masterbranch_Abranch_B
在我的本地工作空间里,我只有masterbranch_A
我想在我的工作空间里有一个干净的地方分支。
也就是说,我想从中央回购的branch_B中得到相同的准确内容,而不是其他内容。
我以为branch_B能做到这一点。
但是,当我这样做的时候,我有很多冲突,我不知道为什么。
我不想手动解决冲突。我只想从中央回购的git checkout -b my_name/branch_B中得到相同的准确内容,而不是其他内容(即,如果有任何本地更改,则放弃任何本地更改)

最佳答案

你想要的只是git checkout branch_B尽管branch_B不存在。事实上,它不存在是至关重要的,否则无法创建它。
不过,在使用这一点之前,请花点时间考虑一下:你根本没有真正“从中央回购创建分支”。不能:只能在自己的存储库上操作。
这看起来像是一个没有区别的区别,但是从众多的git怪异中找出任何意义是至关重要的。你所做的,你所做的,或在你自己的存储库中所做的一切。
(有一件事有点例外,但不是真的是git checkout。在这里,您可以将已经做过的事情放到自己的存储库中,并将它们提供给另一个拥有自己存储库的git,然后根据您提供的内容请求它对自己的存储库进行处理。这取决于git对自己的存储库执行这些操作。)
集中存储库
在处理中央存储库时,从中获取信息的方法是使用git pushgit fetch命令调用它们的git,并从中请求它们的分支名称和其他此类引用的列表,这将为git提供它们的分支提示提交id(sha-1散列)。然后,git按hash id请求完成提取所需的任何提交对象,以及任何其他对象(文件或技术上的“blob”、树对象、早期提交及其树和blob以及带注释的标记对象)。然后,git将所有这些对象存储在存储库中,最后一步,将它们的所有分支名称重命名为新名称,git保证这些名称不会与任何分支名称冲突。
git根据它们的名称合成的新名称是远程跟踪分支(fetch等等)。它们由origin/master创建和更新。如果使用git fetch,或将修剪设置为默认值,则--prune操作将从存储库中删除您拥有的任何远程跟踪分支名称,这些名称在其他git中不再具有相应的常规分支。(这有时是有用的,但不是默认值,可能是由于历史原因加上“只有在其他回购中有大量分支创建和删除时才有用”的原因。)
git fetchorigin部分只是遥控器的名称。实际上,remote只是一个通常origin/master的名称,因为这是由origin创建的默认名称,git在该名称下存储用于git clone的url。这些远程跟踪分支的名称是通过将远程的名称放在远程分支名称前面来构造的:因此git fetch变为masterorigin/master变为branch_A,依此类推。
为什么origin/branch_A创建分支
所需命令的长格式为:

git checkout -b branch_B --track origin/branch_B

(假设您的另一个中心存储库在 git checkout下归档)。这里的意思是“创建一个分支”,而这意味着:“我将提供另一个名字,我希望你,我的Git,在我的存储库中查找一个提交散列ID。当我这么做的时候,我也希望你做的等价于当这个分支生成的时候”。
这被使用了很多,所以Git成员决定让 origin格外聪明:如果你要求Git按名称签出一个分支,并且它不存在, -b查看是否有一个具有相同名称的远程跟踪分支,在剥离远程跟踪分支名称之后。(哇!)也就是说,如果您 --track,您的git将查看是否存在 git branch --set-upstream-toorigin/branch_B或其他内容。
如果只有一个这样的远程跟踪分支,那么将指示 git checkout创建一个本地分支,使用远程跟踪分支的当前哈希ID作为其起点。
但捷径真的必须这样拼写
注意 git checkout不会从 git checkout sneeze开始创建新的 origin/sneeze。它只是从当前提交开始创建一个新的 upstream/sneeze。新的分支也没有设置为跟踪任何远程跟踪分支。这是因为 git checkout告诉 git checkout -b branch_B立即创建分支,所以它永远不会触发“嘿,等等,我没有现有的 branch_B…也许我应该运行一些自动特殊情况代码来代替?”代码。
当然,要使特殊情况代码工作,存储库中必须有 origin/branch_B。它无法在集中存储库中找到它。只有 branch_B能做到这一点,只有 -bgit checkout才真正调用另一个git,使用隐藏在远程名称下的url。
(事实上, branch_B有时还会调用另一个git,但这是针对其他so问题的。)

关于git - 从中央仓库创建本地分支的标准方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40135974/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com