廖雪峰老师git教程的学习总结,教程网址:
https://www.liaoxuefeng.com/wiki/896043488029600
工作区(Working Directory)
本地可以直接看到的目录,即当前直接做出修改的目录。
暂存区(stage 或者 index)
git add 文件名
,就是将文件从工作区添加到暂存区
分支
git commit -m "注释"
,就是将工作区中的文件一起提交到当前分支,可以多次使用add向暂存区添加多个文件,然后使用commit一次将暂存区的文件提交到当前分支。
版本库
即.git文件夹,包括暂存区(stage 或者 index)和分支和HEAD指针。
git init
初始化仓库(会在当前目录下生成.git文件),将当前目录初始化为一个git仓库。
git add 文件名
将文件从工作区添加到暂存区。
git commit -m "注释"
将文件从暂存区提交到git仓库当前版本。
git status
查看仓库状态
git diff
查看不同,默认比较工作区和暂存区
HEAD
在git中使用HEAD代标版本库中当前版本,HEAD上一次commit(不包括reset)为HEAD,上上一次为HEAD^,上10次为HEAD~10。
git log
显示从最近到最远的commit日志,参数–pretty=oneline(即使用git log --pretty=oneline)可以简洁的显示历史,每行显示一次提交
如下:
git log --pretty=oneline
564d04c8f8385f22cc1baea9cc382e0f73e77c6f (HEAD -> master, origin/master) 将readme.md改回readme.txt
829155b770b8ceffdebc65bb4e7870c2feb23aa3 将readme.txt换为readme.md并将编码方式设置为GBK
a1cb6c1e405014f34b795c858f6c99d8ace5b578 添加git的几个基本概念
8a1cabb27f016dc8ab3b6ea2e30ac546c15344df 初次提交
前边的一串数字和字母是commit id(版本号),是一个SHA1计算出来的一个非常大的数字,用十六进制表示。
git reset
更改到指定版本,工作区和版本库(版本库是通过更改HEAD指针)都会更改
git reset --hard HEAD
是回退到版本库最新的一次提交
git reset --hard commit id
回退到指定commit id的版本commit id不需要写全,写前几位就可以。
git reflog
显示版本更改的所有日志,包括commit和reset,如果我们回退到之前的版本又想要再回到在最新的版本,就可以使用这个命令来查找到对应的commit id并使用git reset
命令换到指定版本。
git checkout -- 文件名
撤销工作区修改,两种情况:
暂存区不为空,回退到暂存区的状态;
暂存区为空,回退到版本库当前状态。
git reset HEAD 文件名
丢弃暂存区的修改。
git reset --hard HEAD
已经提交到版本库,可以使用git reset
回退到之前版本。
git rm 文件名
相当于rm 文件名
+ git add 文件名
,即将本地文件删除之后,将这种修改从工作区提交到暂存区。
git rm --cached 文件名
删除git中的文件,但是在本地保留该文件。
SSH密钥
ssh-keygen -t rsa -C "邮件地址"
,该命令在用户主目录里生成.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。添加远程库
git init
git add .
git commit -m "注释"
git remote add origin 网址
git push -u origin master
git push origin master
从远程库克隆
git clone 网址
git push -u origin master
git push origin master
git remote [-v]
查看远程库信息。
分支管理基础
git branch
查看分支,当前所在分支前有一个*符号。
git checkout -b 分支名
创建新的分支并切换到新的分支,等同于git branch 分支名
(创建新的分支) + git checkout 分支名
(切换到指定分支)。
git merge 分支名
将当前分支和指定分支合并。
git branch -d 分支名
删除指定分支,如果还未合并就要删除,需要使用git branch -D 分支名
分支冲突处理
两个分支如果出现冲突,那么执行git merge 分支名
时会出现错误,可以执行git merge --abort
放弃合并,也可以手动解决冲突后执行git add 文件名
+git commit -m "注释“
命令完成合并。
git log --graph
命令可以看到分支合并图。
分支合并的方式
默认为Fast Forward,即无冲突的话直接更改指针,不会产生commit。
可以使用git merge --no-ff
强制禁用Fast Forward,在合并时会产生一次commit。
BUG分支
当前分支任务未完成因此不能commit,但是需要切换到其他分支,可以使用stash
命令。
git stash
保存当前工作空间。
git stash list
查看当前所有的stash,序号0代表最新的stash。
git stash pop
默认恢复最新的stash并删除,相当于git stash apply
(恢复stash) + git stash drop
(删除stash)。也可以在该命令后添加stash序号恢复指定stash。
多人协作
git push origin master
向远程仓库推送指定分支。
git push origin --delete 分支名
删除远程仓库的指定分支,不会删除本地的分支。
git checkout -b 分支名 origin/分支名
从远程仓库抓取分支,克隆远程仓库之后只能看到master分支,其他分支需要手动抓取。
git pull
push出现冲突时从远程仓库pull下来最新的版本,对比修改之后add、commit、push即可。如果出现"There is no tracking information for the current branch. Please specify which branch you want to merge with."的错误,说明是本地的分支和远程仓库的分支没有对应,使用git branch --set-upstream-to=origin/远程仓库分支名 本地分支名
对应后再push。
rebase
将本地提交历史整理成直线。
可以用来管理版本。
git tag
查看标签信息。
git tag 标签名 [commit id]
为指定的commit打标签,默认打在最新的commit上。
git tag -a 标签名 -m "注释" [commit id]
增加注释。
git show 标签名
查看指定标签的信息。
git tag -d 标签名
删除指定标签。
git push origin 标签名
推送标签到远程,也可以使用git push origin --tags
一次性推送所有标签。
删除远程标签
首先使用git tag -d 标签名
删除本地标签,然后使用git push origin :refs/tags/标签名
删除远程标签。
.gitignore文件
让git忽略指定文件。
cd > .gitignore
新建.gitignore文件。
编辑.gitignore文件
每行一个或者一类文件,可以使用正则,可以参考该网站https://github.com/github/gitignore。
git add -f 文件名
强制添加被忽略的文件。
git checkout-ignore -v 文件名
查看.gitinore中的哪个地方忽略了指定文件。
git config [--global] alias.别名 原命令
配置别名,不加--global
则是只针对当前仓库,添加则是所有仓库。每个仓库的Git配置文件都放在.git/config文件中,别名就在[alias]后面,要删除别名,直接把对应的行删掉即可。