1. git的几个概念:
1.1 工作区:
写代码的目录
1.2 缓存区,暂存区stage:
第一次 git add 命令后会在 .git/ 目录下创建一个index 文件,这个就叫暂存区,每次git add 都是提交到这里面,SVN 集中式版本管理系统没有这个概念
1.3 本地库:
使用 git init 命令后这个目录就是一个本地库了,本地库包括工作区和缓存区stage
1.4 远程库:
在gitee 网站上创建的库,需要注册gitee 账户
1.5 数据结构:
git 采用对象数据库方法进行版本管理,类似单向链表
1.6 head:
当前修改的节点头指针 1 <- 2 <- 3 <- 4 <- head
1.7 master:
主干,仓库的主干,可以拉很多分支出来,类似大树有一根主干,可以长出来很多分支一样
1.8 origin:
master 的起源节点,第一个节点,类似大树的根部,然后从上开始生长,开枝散叶
1.9 分布式版本管理
每台电脑都是服务器,而集中式的版本管理,例如SVN,只有一台服务区,代码都是放在服务器上的,电脑上只有一些版本信息,一旦服务器的代码丢失就全了,你想rm -rf / 删库跑路吗,
2. 环境下安装git
$ sudo apt-get install git
$ sudo apt-get search git (如果上面的命令安装失败)
3. 配置用户名
$ git config --global user.name alfred
4. 配置邮箱
$ git config --global user.name 123456789@qq.com
5. 将该目录初始化为一个本地仓库
$ git init
6. 将文件添加到缓存区 .git/index
$ git add test.c
7. 将修改提交到本地库,-m后面的是备注信息
$ git commit -m “test for git cmd”
8. 修改最后一次commit 的备注信息
$ git commit --amend
9. 查看提交记录
$ git log
10. 回退版本
10. 1 撤回git commit 之前的修改,修改了文件,但是还没有git commit,使用该命令会把修改的东西全部撤回成原来的样子
$ git reset --hard
10.2 撤回到指定版本,已经git add 的修改也会被删掉,需要先使用git log 查看commit ID,然后通过commit ID 来返回到指定版本
这个命令比较常用,团队开发一个项目的时候,如果主干被人改坏了,崩溃了,就要一个版本一个版本的往回退,回退一个版本测试一下,就知道是谁的提交引入的问题,大型开发团队每天都有很多人往主干里面提交代码,所以回退版本查问题是很耗时的操作,如果查到是你的提交引入的问题,要被叼死,所以入库的时候要自测充分,然后也有测试团队进行CI门禁测试,小包测试,冒烟测试等等,还有commit review。
$ git reset --hard 621391f5022982256e39547243486113fe08d9f1
10.3 只将头指针恢复,已经git add 的修改不会被删掉, 暂存区和工作区都不会删掉
$ git reset --soft
10.4 只将头指针恢复,已经git add 的修改会被删掉, 修改的内容不会删掉,相当于只撤回了git add
$ git reset --mixed
10.5 回滚到当前仓库指向的版本
就是我现在的代码对应的是仓库里面的哪个版本,就给我回退到这个版本, ^代表上一个版本的意思,HEAD代表当前仓库的指向,一般是指向master
$ git reset --hard HEAD^
10.6 回滚N 次
往回退N个版本,回退3 个版本
$ git reset --hard HEAD~3
11. 查看提交记录
11.1 查看提交记录的详细信息
这个命令经常用
$ git log
11.2 查看提交记录的简略信息
$ git log --pretty=oneline
12. 查看git 的状态,修改了哪些文件,有没有git add, 有没有git commit
这个命令经常用,修改了文件但是还没git add 就是红色字体,git add 了但是还没有git commit 就是绿色字体
$ git status
13. 查看分支
13.1 查看当前分支
查看当前是在哪个分支上面,有的公司会拉很多分支,主干master,产线分支factory,商业分支commercial,开发人员基本都是用master主干来开发,产线分支factory 是专门用来给工厂出版本的,产线上烧的就是这个版本
$ git branch
13.2 创建分支
$ git branch factory
14. 切换分支
这个也比较常用,有时需要同时处理很多件事情,可以每件事情拉一个分支,这样不会乱。一个bug一个分支
$ git switch factory
15. 合并分支
把分支合并到主干master,先切换到主干分支,然后执行命令
$ git merge factory
16. 删除分支
-D 后面是要删除的分支的名称
$ git branch -D factory
17. git 的几个专业术语
Workspace:工作区,写代码的地方
Index / Stage:暂存区(缓存区),在.git/ 目录下,git add 就是add 到这里面缓存起来
Repository:本地仓库,git commit 就是commit 到这里面,也就是你写代码的地方,只不过里面还包括了暂存区
Remote:远程库,服务器端,比如gitee,github,或者也可以把另外一台电脑当做服务器
18. 删除已经 git add 的文件夹
$ git rm -r --cached <文件夹路径>
例如,我一不小心把OBJ 目录git add 添加到暂存区了,这样的话,每次我没修改代码,但是只要我一编译,然后用 git diff 查看修改的时候,就会报一堆的修改,全家OBJ 下面的修改,烦死了,就可以用这个命令把 OBJ 目录从git add 的缓存区删掉,这样我如果不改代码的话,编译后再git diff 就不会报一堆乱七八糟的修改了
$ git rm -r --cached OBJ