Git学习笔记(一)
本文主要分为以下几个方面:
- Git简介
- Git工作流程及原理
- Git基本操作
- Git分支管理
- Github远程仓库
git简介
Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。
Git工作流程及原理
Git工作流程
image一般使用流程如下:
- 1.克隆资源作为工作目录,该资源可以是存放在本地git仓库中,或者存放在github在线仓库中。
- 2.在克隆的资源上添加或者修改文件。
- 3.如果是多人开发,可以随时从代码库中更新本地资源
- 4.在提交前查看修改
- 5.提交修改
- 6.在修改完成后,如果发现错误,可以撤回提交并再次修改并提交。
Git原理
iamge可以通过“git init”命令创建一个git本地仓库,创建好的git体系可以分为三个部分:
- 工作区:工作区就是我们本地的目录
- 暂存区:暂存区是一个索引文件,是上图中的index区,其位于“.git”目录下的index文件中(.git/index)(索引文件是一个目录结构,内容是相应文件的存放地址,真实的文件数据全部在对象库中存放,是上图中的objects)
- 版本库:上图中除去index区,剩下的组成了版本库
对上图的解析
图中的head是一个“游标”,其指向当前有效的分支,master是当前有效分支的目录树。
objects是Git的对象库,位于“.git/objects"目录下,里面包含了创建的各种对象及目录。
结合流程,我们的所有工作将在工作区进行,当我们使用”git add”命令后,我们修改的内容将提交到对象库的一个新对象中,并将该对象的id写入暂存区的文件索引中。
当执行“git commit”命令后,暂存区的目录树会整体写入对象库中,且master分支目录树将更新为暂存区提交的目录树。
当执行“git reset HEAD”命令后,将会使用master分支的目录树替换暂存区中的目录树,即用版本库中的文件替换暂存区的文件,但是工作区不受影响。
当执行“git rm --cached <file>”命令,会从暂存区直接删除文件,但是工作区不会受到影响。
当用“git checkout .”或者“git checkout --<file>”命令,会用暂存区文件代替工作区文件。
当用“git checkout HEAD .”或者“git checkout HEAD <file>”命令,会用head指向的master分支中的全部或者部分文件代替暂存区和工作区的文件。
git基本操作
test目录下有一个test.js文件,作用是输出一段话
Paste_Image.png- git init:该命令初始化一个git仓库
使用当前仓库作为git仓库:git init
使用指定目录作为git仓库:git init newrepo
使用git init命令之后会在当前目录创建一个.git目录。
- git add:可以将文件提交到暂存区
我们将test.js提交到暂存区
可以看到,提示我们一个新的文件被提交到暂存区且可以用“git rm -cached <file>”来删除它
- git status:查看自上次提交之后文件是否有更改,我们修改test.js
再次使用git status可以看到test.js前面变成了AM,只是指该文件在上次提交之后发生了变化。
- git diff
执行 git diff 来查看执行 git status 的结果的详细信息。
git diff 命令显示已写入缓存与已修改但尚未写入缓存的改动的区别。git diff 有两个主要的应用场景。
尚未缓存的改动:git diff
查看已缓存的改动: git diff --cached
查看已缓存的与未缓存的所有改动:git diff HEAD
显示摘要而非整个 diff:git diff --stat
可以看到我们做出的修改
- git commit
之前我们的所有操作都只是提交到了暂存区,而git commit可以将暂存区中的内容提交到git仓库中。
使用git log可以看到我们的提交成功。
- git reset HEAD:版本回滚,可以取消git add的添加,但是不影响工作区,我们在创建一个test1.js,然后提交,但是版本库中只保存了test.js
所以我们用git reset HEAD命令后,暂存区中的内容将被HEAD指向的分支所替代。
- git rm
git rm 会将条目从缓存区中移除。这与 git reset HEAD 将条目取消缓存是有区别的。
默认情况下,git rm file 会将文件从缓存区和你的硬盘中(工作目录)删除。
如果你要在工作目录中留着该文件,可以使用 git rm --cached。
可以看到,工作区和暂存区文件都被删除了。
- git mv:该命令等同于git rm --cached。
- git clone:该命令可以复制要给指定的代码仓库,将放在github中介绍
Git分支管理
分支是git一个十分重要的特性,常用命令如下:
- git branch:列出所有分支
- git branch (branchname):创建分支
- git checkout (branchname):切换分支
- git merge:合并分支
- git branch -d(branchname):删除分支
如上图,我们创建了一个分支branchTest,并用git branch查看,*指明我们当前使用的分支。
Paste_Image.png这是master分支的所有信息,test.js输出我们的分支名称,下面我们切换到branchTest分支:
Paste_Image.png可以看到切换后的起点和master分支节点最后快照相同,现在我们在该分支下创建test1.js并提交:
Paste_Image.png可以看到我们创建test1.js并使其输出该分支名称,下面我们切换回主分支并合并,合并后branchTest分支新创建的test1.js会并入master分支,但是当修改过同一个文件之后,并入操作不能成功,会出现冲突,此时只能通过手动修改消除冲突。
Github
稍后介绍。