纲领:
其实git的学习就是四个区之间关系转换的学习,以及各个区本身一些操作的学习。每个操作都有其特定的作用区。学习时注意区分,可事半功倍!
注:尤其要注意,git是以修改为单位的。
一、配置
关键命令: "git config
"
git config --global user.name "yourName"
git config --global user.email "email@example.com"
二、初始化
关键命令:"git init
"
//切换到工作目录,然后执行初始化命令
git init
三、添加文件
关键命令:"git add xx.file
"
git add test.txt
四、提交文件
关键命令:"git commit -m "添加了xx.file文件"
"
git commit -m "添加了test.txt文件"
五、状态查看
关键命令:"git status
"
git status
六、查看差异
关键命令:"git diff xx.file
"
注:对比的是工作区与暂存区
git diff test.txt
七、查看版本历史
关键命令:"git log
" 、"git log --pretty=oneline
"
注:查看的都是repo库的改动
git log
#简化输出可用参数--pretty=oneline
git log --pretty=oneline
#等号两边没有空格
八、回退历史版本
关键命令:"git reset --hard commit_id
"
注:此命令其实就是修改repo库head指针的指向位置
参数解释:
git reset
有三个主要参数
- --soft -------->只有repo动
- --mixed ----->repo和stage动(注:默认缺省值)
- --hard -------> repo、stage、workspace都动
commit_id
主要有两种表示方式
- HEAD关键字表示
- hash值前四位表示
git reset --hard HEAD^
#--hard 表示三个区域完全回退
#HEAD^表示回退的目的地,^号表示HEAD指针的上一个版本。HEAD^也可用commit id的hash值的前几位替代,git会自动索引。
git reset --hard 142e
九、回流
关键命令:"git reflog
"
注:作用与repo库
git reflog
#用于回流回退过的情况
十、放弃工作区的修改
关键命令:"git checkout -- xx.file
"
注:从暂存去签出,覆盖工作区。
git checkout -- test.txt
# --不能少
十一、删除暂存区的内容(参考第八条)
关键命令:"git reset HEAD xx.file
"
参数解释:
- 默认缺省--mixed
- xx.file在单一文件时可缺省,默认整个文件夹同时修改
- HEAD指向当前head指针
注:本质依旧是修改repo库的head指针,但因为缺省值同时修改了stage,所以效果像是删除了暂存区。
git reset HEAD test.txt
#此操作不会影响工作区
十二、删除工作区文件
关键命令:"git rm xx.file
"
注:在暂存区工作,同git add xx.file
,所以还需要一步commit
git rm test.txt
#会先执行工作区的文件删除操作 `rm test.txt`
git commit -m "rm test.txt"
十三、远程仓库
-
ssh-keygen -t rsa -C "youremail@example.com"
创建私钥与公钥 - 在github添加公钥
- 创建github仓库 (后续可直接按github的提示操作即可。)
- 在本地git工作区运行
git remote add origin git@github.com:name/repoName.git
关联本地repo与远程repo - 初次推送
git push -u origin master
- 后续推送
git push origin master
- 注:SSH警告可以忽略,直接yes
十四、克隆项目
关键命令:"git clone
"
git clone git@github.com:name/repoName.git
#使用了ssh。也可以使用https。
十五、分支
关键命令:
-
git branch <name>
创建分支 -
git checkout -b <name>
创建并切换分支 -
git checkout <name>
切换分支 -
git branch
查看分支 -
git merge <name>
合并指定分支到当前分支 -
git branch -d <name>
删除指定分支
git branch testDevA
#创建分支A
git checkout -b testDevB
#创建并切换到B分支
git checkout master
#切换到主分支
git branch
#查看分支
git merge testDevA
#将A分支合并到主分支
git merge testDevB
#将B分支合并到主分支
git branch -d testDevA
#删除A分支
git branch -d testDevB
#删除B分支
十六、贮藏栈
注:常用来暂存当前工作,去解决临时问题,之后再恢复工作。
关键命令:
-
git stash
贮藏入栈 -
git stash pop
出栈并清空栈 -
git stash list
贮藏列表(可多次贮藏,然后查询,并用下面命令取出) -
git stash apply
出栈 -
git stash apply stash{0}
指定贮藏出栈 -
git stash drop
清空栈
git stash
#贮藏
git stash pop
#取出
十七、标签
注:默认给最新的commit_id打标签,也可指定commit_id。
注2:标签的显示是按照字母顺序的,不是时间顺序。
注3:标签默认只存储在本地,需要而外推送远程库。
关键命令:
-
git tag <tagName>
打标签 -
git tag
查看标签名 -
git tag <tagName> <commit_id>
给特定commit_id打标签 -
git show <tagName>
查看指定标签的详细信息 -
git tag -a <tagName> -m <describe> <commit_id>
-a指定标签名,-m注释。 -
git tag -d v1.0
删除标签 -
git push origin <tagName>
推送特定标签 -
git push origin --tags
推送全部标签 -
git push origin :ref/tags/<tagName>
删除远端标签
git tag v1.0
git tag
git tag v0.3 1e2c
git show v1.0
git tag -a v0.4 -m "this is a test" 3re4
#commit_id 可省略,默认最新commit_id。
十八、git私服搭建
待续。