Git学习笔记
一、Git的四个工作区域
Workspace:工作区,就是平时存放修改项目代码的地方
Index / Stage:暂存区,用于临时存放你的改动。事实上在Git版本库中他只是一个叫 index 的文件,即 .git/index 文件。
Repository:版本库,暂存区的内容提交之后就到了版本库。版本库是一个隐藏的目录.git,这里面有你提交所有版本的数据,其中HEAD指向最新放入仓库的版本
Remote:远程仓库,托管代码的服务器,可以简单的认为是你将项目存储在类似github仓库中,用于远程数据交换。
工作目录(Working Directory)、暂存区(Stage/Index)、版本库(Repository或Git Directory)、git远程仓库(Remote Directory),文件在这四个区域之间的转换关系如下图示:
二、Git分支
1、什么是分支?
Git 的分支也非常轻量。它们只是简单地指向某个提交纪录 —— 仅此而已。所以许多 Git 爱好者传颂:早建分支!多用分支!
这是因为即使创建再多的分支也不会造成储存或内存上的开销,并且按逻辑分解工作到不同的分支要比维护那些特别臃肿的分支简单多了。
在将分支和提交记录结合起来后,我们会看到两者如何协作。现在只要记住使用分支其实就相当于在说:“我想基于这个提交以及它所有的父提交进行新的工作。”
2、创建分支
用 git branch <分支名>
来创建分支,用 git checkout <分支名>
来切换到分支。
对了,有个更简洁的方式:如果你想创建一个新的分支同时切换到新创建的分支的话,可以通过 git checkout -b <分支名>
来实现。
如果有a,b两个分支,a分支有readme.txt文件和test.txt文件,而b只有test.txt文件。当分支从a切换至b后,windows本地文件也会随之改变,即工作目录下只有test.txt文件。
此外,已经add到暂存区但未commit的文件,每个分支都可以操作该文件。直到某个分支执行commit操作后,该文件就只对该分支可见(未执行merge操作)
3、合并分支
我们已经知道如何提交以及如何使用分支了。接下来咱们看看如何将两个分支合并到一起。就是说我们新建一个分支,在其上开发某个新功能,开发完成后再合并回主线。
咱们先来看一下第一种方法 —— git merge
在 Git 中合并两个分支时会产生一个特殊的提交记录,它有两个父节点。翻译成自然语言相当于:“我要把这两个父节点本身及它们所有的祖先都包含进来。”通过图示更容易理解一些。
我们准备了两个分支,每个分支上各有一个独有的提交。这意味着没有一个分支包含了我们修改的所有内容。咱们通过合并这两个分支来解决这个问题。
我们要把 bugFix 分支合并到 main 分支里,命令为:git merge bugFix
语法格式:
git merge <要合并的分支名>
,表示将指定的分支合并到当前分支。
通过上图可以看到,main 现在指向了一个拥有两个父节点的提交记录C4。假如从 main 开始沿着箭头向上看,在到达起点的路上会经过所有的提交记录。这意味着 main 包含了对代码库的所有修改。
咱们再把 main 分支合并到 bugFix
先切换bugFix分支:
git checkout bugFix
,然后在合并main分支:git merge main
因为 main 继承自 bugFix,Git 什么都不用做,只是简单地把 bugFix 移动到 main 所指向的那个提交记录。
现在所有提交记录的颜色都一样了,这表明每一个分支都包含了代码库的所有修改!大功告成!
第二种合并分支的方法 —— git rebase
Rebase 实际上就是取出一系列的提交记录,“复制”它们,然后在另外一个地方逐个的放下去。
Rebase 的优势就是可以创造更线性的提交历史,这听上去有些难以理解。如果只允许使用 Rebase 的话,代码库的提交历史将会变得异常清晰。
执行 git rebase main
命令过后:
切换到 main 分支:
执行 git rebase bugFix
命令过后: