我有一个名为test-repo
的存储库。
现在,我在该存储库上有两个分支,名为:
两个分支只包含一个名为test.txt
的文件。
test.txt
包含
hello I am here
和master-bkp中的test.txt
包含
hello I am there
现在,在我的本地存储库中,我写道:
git checkout master
git merge master-bkp
现在test.txt
包含
hello I am here
hello I am there
当我触发这两个命令时,有人可以解释Git如何在内部工作吗?
git checkout master
git checkout master-bkp
注意:请不要就git checkout
发表意见,我需要解释其背后的内部逻辑。
答案 0 :(得分:2)
Git checkout
有详细记录,这来自doc:
更新工作树中的文件以匹配索引中的版本或 指定的树。如果没有给出路径,git checkout也会 更新HEAD以将指定的分支设置为当前分支。
因为我知道你可以在这里阅读文档是我如何看待它。 Git是一个修订控制系统,它提供了许多工具来管理您的代码历史记录。由于你有很多分支,我会假设你正确理解它们是如何工作的。 Checkout只是您用于移动到其他分支的命令。主要目标是更新工作树中的文件,以便获取与某个分支关联的数据。
幕后花絮
没有魔力。它是否在文档中说它只更新HEAD
所以你在正确的分支上。就是这个。另外,正如@ quetzalcoatl指出的那样,重要的是要知道git checkout
执行变更检测,禁止更改分支,同时执行未完成的工作。因此,执行git checkout
可视为'安全'。
注意强>
有时初学者很难理解git checkout
和git reset
之间的区别,即使它们完全不同。在我看来,最简单的方法是:
您想要更新什么内容?
如果答案是我当前的分支,请阅读git reset
上的文档。如果您的目标是根据其他分支更新工作树,那么git checkout
就是您正在寻找的。
此声明只有一个例外。如果您的目标是覆盖一个文件,则可以使用git checkout
,请查看此answer。