当我运行Git checkout branch\u name时,Git实际上做了什么?
我有一个名为当我运行Git checkout branch\u name时,Git实际上做了什么?,git,github,gitlab,Git,Github,Gitlab,我有一个名为testrepo的存储库 现在,我在该存储库上有两个分支,称为: 主人 主bkp 两个分支只包含一个名为test.txt的文件 master中的test.txt hello I am here hello I am there hello I am here hello I am there 主bkp中的test.txt hello I am here hello I am there hello I am here hello I am there 现在,在我的本地存储
testrepo
的存储库
现在,我在该存储库上有两个分支,称为:
test.txt
的文件
master中的test.txt
hello I am here
hello I am there
hello I am here
hello I am there
主bkp中的test.txt
hello I am here
hello I am there
hello I am here
hello I am there
现在,在我的本地存储库中,我写道:
git checkout master
git merge master-bkp
现在master中的test.txt
包含
hello I am here
hello I am there
hello I am here
hello I am there
有人能解释一下当我触发这两个命令时Git是如何在内部工作的吗
git checkout master
git checkout master-bkp
注意:请不要对git checkout
发表意见,我需要解释一下它背后的内部逻辑 Git有很好的文档记录,这是来自文档:
更新工作树中的文件以匹配索引或目录中的版本
指定的树。如果没有给出任何路径,git签出也将被删除
更新头以将指定的分支设置为当前分支
因为我知道你们可以阅读这里的文档,所以我是这么看的。Git是一个版本控制系统,它提供了许多工具来管理代码历史记录。由于您有许多分支,我假定您正确理解它们的工作原理。签出只是用于移动到其他分支的命令。主要目标是更新工作树中的文件,以便获得与某个分支关联的数据
幕后
没有魔法。它在文档中说它只更新HEAD
,所以你在正确的分支上。就是这样。此外,正如@quetzalcatl所指出的,重要的是要知道,git checkout
执行更改检测,该检测禁止在有未限制工作的情况下更改分支。因此,执行git签出可以被认为是“安全的”
注意
有时初学者很难理解git checkout
和git reset
之间的区别,尽管它们完全不同。在我看来,最简单的方法是:
您想更新什么?
如果答案是我的当前分支,请阅读git reset上的文档。如果您的目标是基于另一个分支更新工作树,那么您需要的是git checkout
这句话只有一个例外。如果您的目标是覆盖一个文件,您可以使用git checkout
,看看这个。您可能至少应该给出一些您对所执行命令的理解。否则,您可能会要求某人从头开始解释有关git的一切。请阅读以下内容:在您描述的场景中,您仅在运行合并之前运行了一次git checkout master。您没有执行git checkout master bkp,甚至一次也没有。请澄清您的最后一个问题,或改进示例,以便我们知道您询问两次签出的原因和背景。另一件事是,您为什么在示例中包含merge
?您正在询问有关签出的问题。这两个是不相关的。你确定你没有把合并
的效果误认为是签出
的效果吗?我很确定他的问题只是关于签出
,也许我错了。它只更新HEAD
,当然也会更新工作副本中的文件以匹配HEAD——在那一刻,如果工作副本中有未提交的更改,它会执行更改检测和非破坏性合并。。所以事实上这里发生了一些事情,这是很好的一点!它缺少更改检测,我将添加它,谢谢<代码> Git签出和Git重置,即使它们完全不同 -考虑<代码> Git签出我的/目录/ FoABAR。CS < /代码>并将其与“代码>签出< /代码>和<代码>重置< /代码>进行比较。checkout的这个角落用例是一个单文件重置,相信我,我已经看到很多git for初学者网站展示了checkout命令的用例,声称从当前或不同版本获取文件的新版本很方便branch@quetzalcoatl我真的很欣赏你的洞察力!但我必须承认我不同意你的第二个评论。我不建议这样处理这种情况。看看这个。根据您的第一条评论更新了答案。Thanks@quetzalcoatl哦,我刚注意到你说了一个文件!我将添加一个链接