Git教程学习笔记
简述
Git是目前世界上最先进的分布式版本控制系统。
- 分布式:没有“中央服务器”(对应集中式
SVN
),每个人的电脑上都是一个完整的版本库。 - 版本控制:记录每次文件改动的内容等。
Git安装与配置
不同系统的Git
安装教程请参考:Git官网
1 2 3 |
# 安装git后 全局设置你本地的用户名和邮箱 起验证的作用 git config --global user.name "你的名字或昵称" git config --global user.email "你的邮箱" |
上面代码中,git config
命令的--global
参数,表示的你在这台机器上的所有的Git
仓库都会使用这个配置,当然你也可以单个仓库进行指定。
创建版本库
版本库又名仓库(respository
),可以理解为一个目录。这个目录中所有文件都可以被Git
管理起来,每个文件的修改、删除都能追踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。
选择一个合适的目录,使用git init
命令创建仓库
1 2 |
git init # Initialized empty Git repository in /Users/seabert/www/trains/git/.git/ |
上面代码中,我们可以看到在选定的目录下生成了一个.git
的隐藏目录,这个目录是Git
用来跟踪管理版本的,所以轻易不要修改里面的内容,否则可能会导致版本控制系统失效。
将文本添加到版本库
1 2 3 4 5 |
git add readme.md git commit -m "添加readme文件" # 1 file changed, 1 insertion(+) # create mode 100644 readme.md |
上面代码中,将文本添加到版本库只需要两步:
- 使用命令
git add
命令告诉Git
,把文件添加到仓库; - 使用命令
git commit
命令告诉Git
,把文件提交到仓库。
值得注意的是:
- 所有的版本控制系统,只能跟踪文件的改动(比如说在某行增加或删除了一个单词等)。但是对于像图片、视频和word文件这些二进制文件,却无法知道文件的内容改变,只能跟踪到文件的大小变化。
- 使用
git add
或其他git
相关的命令,必须要在已经创建版本库的目录中进行使用。否则会提示fatal: not a git repository (or any of the parent directories): .git
- 使用
git commit
命令提交文件时,-m
参数后面的注释内容最好是有意义的,这样以后还原或修改内容,都可以很快找到改动记录。
工作区、暂存区和版本库
基本概念
- 工作区:就是电脑中可以看到的目录(我们创建仓库选择的目录)。
- 暂存区:英文名为
stage
或index
,一般存放在.git
目录下的index
文件中。 - 版本库:工作区中有一个
.git
的隐藏目录。
三者之间的关系如下:
- 图中左侧为工作区,右侧为版本库。在版本库中标记为
index
的区域就是暂存区,标记为master
的是master
分支所代码的目录树。 HEAD
实际是指向master
分支的一个“游标”,所以图示中出现HEAD
的地方可以用master
来替换。- 图中
objects
标识的区域为Git
的对象库(.git/objects
),里面包含了创建的各种对象及内容。 - 当对工作区新增或修改的文件执行
git add
命令时,暂存区的目录树被更新,同时工作区新增或修改的文件内容被写入到对象库中一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。 - 当执行提交操作
git commit
时,暂存区的目录树写到版本库(对象库)中,master
分支会做相应的更新。即master
指向的目录树就是提交时暂存区的目录树。
查看日志
-
查看提交日志
增加
--pretty=oneline
参数,方便观看日志12345678910111213# 查看提交日志git log# 查出操作的命令git reflog# 版本回退上一个版本、回退两个版本、回退100个版本git reset --hard HEAD^git reset --hard HEAD^^git reset --hard HEAD~100# 还原版本git reset --hard commit_id
远程仓库
添加远程库
1 |
git remote add origin git远程地址 |
上述代码中,会制定远程的仓库名称为origin
,并且关联本地仓库与远程库。
1 |
git push -u origin master |
第一次推送时,使用-u
参数会把本地的master
分支内容推送到远程的master
分支,并且会将本地master
分支与远程master
分支进行关联,下次再推送代码时,则可以省略-u
后面的参数。
删除远程库
1 2 3 4 |
# 查看远程信息 git remote -v # 删除远程仓库 git remote rm origin |
从远程库进行克隆
1 |
git clone git远程仓库地址 |
克隆远程仓库支持多种协议,其中ssh
协议速度最快
分支管理
合并冲突
-
分支操作
1234567891011121314151617# 查看分支git branch# 创建分支git branch <name># 切换分支git checkout <name> 或 git switch <name># 创建并切换分支git checkout -b <name> 或 git switch -c <name># 合并某分支到当前分支git merge <name># 删除分支git branch -d <name> 解决冲突
git冲突显示样式
12345<<<<<<< HEADno,you can't.=======yes,you can.>>>>>>> dev移除冲突后,即可重新提交代码。使用
git log --graph --pretty=oneline --abbrev-commit
命令可详细看到解决冲突的过程。-
独立分支解决bug
操作工作现场 ??
12345678910111213141516# 储存工作现场git stash# 查看工作现场内容列表git stash list# 恢复工作现场git stash apply# 恢复指定的工作现场git stash apply stash@{0}# 删除工作现场git stash drop# 恢复并删除工作现场git stash pop
标签管理
操作标签
1 2 3 4 5 6 7 8 9 |
# 创建标签 git tag <tagname> # 指定提交版本号打标签 git tag <tagname> <commit_id> # 查看所有标签 git tag # 查看单个标签 git show <tagname> |