Git学习教程

1.git 区域

工作区、暂存区以及 Git 目录。

使用git checkout命令,目录就是工作区,使用add命令,将文件添加到暂存区,commit把文件提交到本地分支上(本地仓库)。

2.git文件状态变化

Git 下文件生命周期图。

  • Untracked:没有被git跟踪的文件
  • Unmodified:没有被修改的文件
  • Modified:修改后的文件
  • Staged:暂存文件

我们在一个目录下使用git init命令,会把当前目录初始化为一个git项目,其中的文件都将是untracked装状态。我们对未被跟踪的文件进行操作都只会是untracked状态。使用git add .命令将当前目录下所有文件添加到暂存区,同时这些文件被git记录,为跟踪文件。

我们对跟踪文件进行修改后,文件就变成Modified状态。

我们使用git commit -m "xxx"命令后所有暂存区的文件提交到本地分支上。随后文件都变为Unmodified状态。

可以使用git status命令查看当前git分支下文件状态。

3.git 忽略文件

有时候我们不得不在一些存放着与项目无关的文件目录下生成git本地仓库,我们可以生成.gitignore文件忽略。(这部分可以去官网看)

ps:我之前就是vscode在错误的位置使用了git init

命令,结果10000+untracked提醒。

4.git 分支

当我们使用git commit命令时,Git会计算每一个子目录的校验和,将这些检验和保存为树对象。如果只有根目录那么就只有一个树对象。

随后git会创建一个提交对象,其中包含了一个指向最上层树对象的指针。

所以我们可以分出三个对象:

  • blob对象:文件快照
  • tree对象:目录结构和blob对象索引
  • commit对象:存放前述树对象

首次提交对象及其树结构。

如果是多层目录,例如/根目录下有/test1/,/test2/,目录,那么树对象应该有三个,根目录树对象指向根目录下文件和字目录树对象。

如果我们再对这些文件进行修改并提交那么这次的提交对象就会包含一个上次提交对象的指针。

提交对象及其父对象。

如图,最后一个commit就是我们最后commit的对象。

讲了这么多,我们可以明白,其实git的分支本质就是一个指针,一个可以指向不同提交对象的指针。

4.Head指针和分支创建和切换:

分支及其提交历史。

上图,我们发现了一个HEAD指针,他是一个特殊指针,指向当前分支所在哪个分支。例如我们当前项目有很多分支master,test等,我们通过HEAD指针确定我们处于哪个分支。

分支创建使用git branch testing命令。

两个指向相同提交历史的分支。

HEAD 指向当前所在的分支。

发现,不同的分支指向了同一个commit对象,通过head指针就能区分在哪个分支上。

所以分支切换的本质就是改变head指针的指向。

分支切换命令git checkout testing

HEAD 分支随着提交操作自动向前移动。

另外我们的head指针会随着分支的提交自动往前移动。

checkout命令还会更改我们工作目录的文件,例如我们在testing分支上新增了文件,切回master分支时,文件会消失。

5.分支合并:

在我们了解分支的本质后,分支合并的理解很简单。

合并命令:git merge branch branch为分支名。

例如上方master分支和testing分支,我们希望两个分支合并,我们使用git checkout testing命令,切到testing分支,使用git merge master命令,将master分支内容合并到testing分支下。

注意我们合并时的分支必须是本地分支,如果不是,我们需要先把远程分支拉到本地,然后合并。

6.远程分支:

先写着么多。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值