【Git】我终于理解了git add和git fetch的概念
在成为工程师之前的学习阶段,我使用GitHub Desktop。然后成为工程师后,我开始依赖于SourceTree。
我之前对于git命令和git概念大致有所了解,但是我购买了Udemy的教材后,对于这个标题中的命令特别有所学习,之前对它完全理解错误了。
将文件添加到git版本控制系统中。
我以为在本地工作树中对文件进行更改后,应该commit到本地仓库并push到远程仓库。
ファイル変更後
→ commit
→ push
在现实中,实际上有一个称为“阶段”的阶段,从工作区添加到阶段,再从阶段提交到仓库才是正确的做法。如果一开始就使用GUI,可能会忽略这一步骤。
ファイル変更後
→ add
→ commit
→ push
文件更改后进行add操作,将添加的文件压缩后存储在.git/objects目录下。除此之外,为了维护压缩文件和原文件的关联,文件的结构和名称被保存在名为.git/index的二进制文件中进行管理。
理解了这些数据结构后,对之后的提交和推送流程也更容易理解了。
拉取git
从远程分支拉到本地分支,这是我的理解,但这并不足够。
经常听说,push的反义词不是pull,而是fetch,
但在学习这个概念之前,我对合并(merge)的理解也很模糊,得知这点感到很失望。
首先,pull本质上是fetch并merge的一种步骤。merge的概念通常是将分支合并在一起,但更准确地说应该是将其取入。
所以,fetch是从远程代码库获取最新内容到本地代码库的操作。
另外,fetch得到的origin/master和master是不同的,要反映fetch的远程分支内容就需要进行合并操作。
在master分支上,将不想要合并的分支拉取到本地可能会造成危险,这就是所谓的一切都要pull是危险的原因。虽然我认为这在命令行中确实会发生(但如果使用SourceTree之类的工具,我认为基本不会发生)。