学习《廖雪峰-Git教程》时所作的笔记,常用的Git
指令操作基本都包含了。
创建版本库
-
mkdir 文件夹名
…………创建新目录 -
cd 文件夹
-
git init
…………把这个目录变成Git
可管理仓库 -
git add 文件名.后缀
…………把该文件添加到版本库(实际上是添加到暂存区stage) -
git commit -m "说明内容"
…………提交文件到仓库(实际上就是把暂存区的所有内容提交到当前分支)
注意:
1、创建的文件夹即为一个工作区2、工作区内隐藏的
.git
文件夹即为Git的版本库3、可多次
git add
,一次git commit
4、
git commit
之后,如果你又没有对工作区做任何修改,那么工作区就是“干净”的(可用git status
查看)5、每次修改,如果不用
git add
到暂存区,那就不会加入到commit
中
查看
-
cat 文件名.后缀
…………查看详细信息(打开文件) -
git status
…………查看仓库状态 -
git diff 文件名.后缀
…………查看该文件的改动的地方 -
git log
…………查看仓库的所有历史记录(详细版) -
git log --pretty=oneline
…………查看仓库的所有历史记录(简洁版) -
git log --graph
…………查看分支的当前状况(详细版) -
git log --graph --pretty=oneline --abbrev-commit
…………查看分支的当前状况(简洁版) -
git diff HEAD -- readme.txt
…………git commit
后,可用该命令可以查看工作区和版本库里面最新版本的区别(修改没有add
,直接commit
是提交不上的)
版本回退
-
git reset --hard HEAD^
…………回退到上一版本(错误修改已经commit
,且未推送到远程库时) -
git reset --hard HEAD^^
…………回退到上两个版本(以此类推) -
git reset HEAD 文件名.后缀
…………把刚刚add
到暂存区的修改撤销掉,退回到工作区 -
git checkout -- 文件名.后缀
………… 1、修改后未add
,则回到之前commit
的状态;2、add
后做了修改,则回到刚add
的状态 -
git reset HEAD file & git checkout -- file
…………错误修改后add
的情况,先用reset
退回工作区,再用checkout
撤销修改
版本恢复
-
git reset --hard 版本号前几位
…………回到特定的某一版本(可找到commit id
) -
git reflog & git reset --hard
…………git reflog
可查看历史所有版本号
文件删除
-
rm file
…………删除工作区文件(本地文件,删除后git status
会提示删除文件) -
git rm file
…………删除版本库文件
文件还原
git checkout -- file
…………错误删除工作区文件,则可用版本库文件替换工作区文件(前提是该文件之前已commit
)
本地库关联远程库
-
Github中新建repo
…………与要管理的本地库同名 -
git remote add origin [email protected]:LiamWang666/learngit.git
…………关联本地库,origin
为远程库的默认名字 -
git push -u origin master
…………推导本地库到远程库(第一次推送加-u
可以将两库的master
分支关联起来,简化后续命令) -
git push origin master
…………后续每次commit
后提交,无网络时在本地工作,有网络时push
一下就OK -
git push origin dev
…………推送任意指定分支到远程对应分支
远程库中克隆到本地
-
方式1:
Github
中新建repo
-
方式2:
SSH
协议:git clone [email protected]:LiamWang666/gitskills.git
…………克隆该库到本地 -
方式3:
https
协议:git clone https://github.com/michaelliao/gitskills.git
注意:
在另一台电脑上克隆到本地的仓库默认只能看到主分支master(可用git branch
查看),要想在其他分支如dev
上进行开发,需要git checkout -b dev origin/dev
分支管理
作用:用于在不影响他人工作(依靠完整的代码库)的情况下进行自己的工作,在分支1上commit
的内容并不会出现在分支2上
-
git checkout -b dev
或者git switch -c dev
…………创建并切换(-b
)到dev分支,相当于git branch dev & git checkout dev
-
git branch
…………查看当前分支(带*的),且列出所有分支 -
在dev分支上进行修改
-
git checkout master
或者git switch master
…………切换到主分支 -
git merge dev
…………合并指定分支dev
到当前分支master
上(Fast-forward
表示此次合并是“快进模式”,即直接把master
指向dev
的当前提交,所以合并速度非常快) -
git branch -d dev
…………dev
分支无用后删除
注意:
1、创建Git
版本库时,Git
自动为我们创建了唯一一个master
分支(git commit
默认就是往该分支上提交)2、
master
分支应该是非常稳定的,仅用来发布新版本,平时应该在分支上干活;3、若在两个分支上都分别修改了同一文件,则不能进行快速合并,合并时会出现
conflict
,可用cat file
查看冲突的地方,手动解决后再进行合并4、快速模式合并
git merge dev
之后会丢失删除的分支信息,看不出来曾经做过合并5、普通模式合并(
--no-ff
)git merge --no-ff -m "merge with no-ff" dev
合并后分支历史,能看出来曾经做过合并6、强行删除未合并的分支
git branch -D <name>
7、多人同时修改分支推送问题:
https://www.liaoxuefeng.com/wiki/896043488029600/900375748016320
8、
git rebase
可将复杂的分支历史变成一条直线,方便查看历史提交的变化
标签管理(一般为版本号,如V1.0)
-
git tag
…………查看所有标签 -
git tag <name>
…………新建标签,默认打在当前分支的最新提交的commit
上 -
git log --pretty=oneline --abbrev-commit & git tag <name> 版本号
…………补标签,给过去提交的某一版本打标签 -
git show <name>
…………展示某一标签代表的版本的详细信息 -
git tag -d <name>
…………删除本地指定标签 -
git push origin :refs/tags/<name>
…………删除远程标签(先删本地) -
git push origin v1.0
…………推送指定标签到远程 -
git push origin --tags
…………一次性推送所有未推送的本地标签
注意:
标签总是和某个commit
挂钩。如果这个commit
既出现在master
分支,又出现在dev
分支,那么在这两个分支上都可以看到这个标签。
怎么参与他人项目
- 先
Fork
一下别人的项目仓库 - 克隆到自己的本地:
git clone [email protected]:LiamWang666/bootstrap.git
(注意是自己的用户名,否则没有推送权限) - 推送
pull request
给官方仓库来贡献代码
码云的使用
加快访问Github
的速度
个性化操作
- 配置别名:
git config --global alias.新名字st 旧指令名status
…………若旧指令名为多个单词,含间隔,则加’’