Git入门操作
本文中介绍了Git
的部分原理和操作
- 工作原理
- 工作区、暂存区、版本库
- 基本命令
- 回退功能
- 撤销和删除
- 分支管理
Git工作原理
原理图
Git
是目前世界上最先进的分布式版本控制系统。工作原理见下图:
- workspace:工作区(本地目录)
- index/stage:暂存区
- respository :仓库区(本地仓库)
- remote:远程仓库
工作区、暂存区、版本库
工作区:自己电脑上本机看到的目录,以及以后需要新建的目录文件等都是属于工作区的范畴
暂存区:使用 git add
把文件添加进去,实际上就是把文件添加到暂存区;使用git commit
提交更改,就是把暂存区的所有内容提交到当前分支上
版本库:工作区目录下有一个隐藏目录.git
,不是属于工作区的,这个是版本库。版本库里面存了很多的东西:stage
(暂存区)、第一个分支master
、指向master
分支的第一个指针HEAD
Git基本命令
git init :初始化,会多出一个.git隐藏目录
git status :查看状态
git add <filename> :添加一个文件
git add .:添加全部
git commit -m "第一次提交" :提交到本地仓库中
git diff <filename>:查看某个文件修改内容
git clone git@github.com:pidada/charts.git :克隆某个仓库,后面是仓库地址
image版本回退
查看提交日志
git log:查看提交版本号(从近到远的显示日志)
git log —pretty=oneline:显示少许内容(版本号相关)
回退版本
git reset —hard HEAD^
:上个版本
git reset —hard HEAD^^
:上上个版本
git reset —hard HEAD~100
:回退到前100个版本号
回退指定版本
git reflog:获取版本号
git reset —hard 6fcfc89:回退到指定的版本(6fcfc89是版本号)
撤销和修改
撤销
除了使用上面的回退版本方法之外,还可以使用下面的方法:
git checkout -- <filename>
image上述命令指的是将文件在工作区中的修改全部撤销,分为两种情况:
- 文件修改后,没有放到暂存区,使用上述命令直接撤销和修改,回到和版本库一模一样的状态
- 文件修改后,已经放入了暂存区,接着做了修改,撤销修改后回到添加暂存区后的状态
删除
如果在版本库中添加了文件,然后提交
git add test.txt
git commit -m "add test"
rm test.txt # 直接删除文件
git status # 查看是否删除
git checkout -- test.txt # 恢复文件
远程仓库
添加公钥
本地Git
仓库和远程的GitHub
仓库之间是通过SSH加密进行传输进行连接的。
-
创建
SSH key
,查看本地的.ssh
目录(隐藏目录)-
id_rsa:私钥
-
id_rsa.pub:公钥(需要添加到github的SSH keys页面中)
-
-
添加公钥
image
创建仓库
关于新建github账号和GitHub仓库的过程,看Git使用-10分钟快速入门
几条重要的命令
git remote add origin https://github.com/tugenhua0707/testgit.git
git push -u origin master # 从本地添加到远程仓库中,第一次需要加上 -u 参数
git push origin master # 后面的提交不需要
分支
创建、查看和切换分支
git branch test # 创建分支
git branch # 查看分支 当前分支加上星号
git checkout test # 切换分支
git checkout -b test # 创建并切换分支,相当于是下面两句
# git branch dev
# git checkout dev
# 如果在test分支上修改的内容,想合并到分支master上面
git merge test # 合并指定分支到当前分支上(需要在master分支上执行)
git branch -d test # 删除分支
image
分支管理策略
通常合并分支时,git
一般使用Fast forward
模式,在这种模式下,删除分支后,会丢掉分支信息,使用带参数--no-ff
来禁用Fast forward
模式
git merge --no-ff -m "merge with no-ff" test # 合并分支,并且禁用fast forward模式
笔记:首先master主分支应该是非常稳定的,也就是用来发布新版本,一般情况下不允许在上面操作。一般情况下在新建的test分支上操作,等到test分支代码稳定后,可以合并到主分支master上来。