git版本控制入门
一. 为什么要用版本控制系统
1. 更方便的存储版本
2. 恢复之前的版本
3. 更方便的进行对比
4. 协同合作
二. git.exe安装
三. 简单配置
没有进行配置会出现警示信息,通过命令配置
git config --global user.name "cnhkzyy" #配置用户名 git config --global user.email "1069966476@qq.com" #配置联系邮箱
查询最小用户配置
git config --global --list
四. 建立git仓库
1. 已有目录的时候
cd file_folder
git init
(1) 已有一个目录,测试报告
(2) 进入测试报告目录,点击"Git Bash Here"
(3) 执行"git init",可以看到测试报告目录下出现了一个.git目录
这里面存储了版本控制信息
2. 没有目录的时候
cd file_folder
git init projectsname #重新命名一个新的目录
在 测试git 目录下,执行git init demo,会生成一个demo的新目录,demo目录下的.git目录,保存着版本信息,demo下没有项目内容,我们可以添加项目内容
五. git配置优先级
git config --local local只对仓库有效。缺省等同于local
git config --global global对登录用户所有仓库有效
git config --system system对系统的所有用户有效
优先级:local > global > system
六. git版本提交
git add file #执行完会把文件存到临时空间
git add . #添加该目录下的所有文件
git commit -m "版本信息" #正式提交到git仓库
(1) 在demo目录下新建一个测试报告.txt文件,文件内容为"test"
(2) 把文件添加到暂存区
(3) 提交
(4) 查看提交
(1) 在本地新建一个readme.txt文件,文件内容为"欢迎来到git世界"
七. 版本状态查看
git status
git status -s 可以用简短的信息进行阐述
git status --short
(1) 往readme.txt里更新一段文字:"git是一个分布式的版本控制系统"
(2) git status,可以看到文件被更新,但没有被提交,readme.txt为红色
(3) 使用git add readme.txt提交到暂存区后,再次使用git status查看,发现,readme.txt变为绿色
(4) 使用git status -s 查看更简短的信息,发现只有一个绿色的M,M表示修改已被提交到暂存区
(5) 新添加一个文件,new_file.txt,使用 git status -s 查看,发现前面有个红色的??,??表示新添加的文件,还没有提交到暂存区
(6) 使用git add new_file.txt,将new_file.txt提交到暂存区,然后使用 git status -s 命令查看,发现前面有个绿色的A,A表示新添加的文件
(7) 正式提交到仓库,git commit -m "注释",这里我打的有点问题,一不小心跟成了文件名。然后使用git status -s 查看,发现没有内容了
八. git历史版本查看
git log 最简单的使用
git log --pretty=oneline 只显示一行
git log -p 显示版本之间的差异
git log -5 显示最近5个版本
git log -5 -p 显示最近5个版本及他们之间的差异
git log --stat 查看大体的统计信息
(1) git log查看最新三次提交的日志(时间顺序倒序)
(2) git log --pretty=oneline,显示简短的提交信息
(3) git log -p 查看版本之间的差异
(4) git log -2 查看最近提交的两个版本
(5) git log -2 -p
(6) git log --stat 查看大体的统计信息
九. 忽略文件gitignore
# 注释
glob 模式匹配,比较类似正则表达式匹配
* 星号,匹配0或者任意字符
[abc] 任何一个在括号内的字符
? 匹配一个任意字符
/ 结束指定目录
! 取反
(1) 借助vscode,新建下面几个文件和目录
(2) 编辑.gitignore文件,写入以下内容
(3) 所有更改暂存,然后提交,发现demo.pyc也提交了,有点诡异
十. 版本比对
git diff 在未提交到缓存区之前,比对版本之间的差异
git diff 老版本 新版本
git diff --staged 已经添加到暂存区的差异
git commit -a -m "注释" 添加并提交修改到git仓库
(1) 在未修改文件之前,git diff 发现无内容,在demo.py中新增 import time,然后执行 git diff,发现有内容了
(2) 在使用了 git add . 命令暂存之后,再使用 git diff,发现没内容了
(3) 修改demo.py,新增内容"time.sleep(2)",使用git commit -a -m "time sleep"可以一步到位,将修改内容添加到git仓库
(1) git diff 老版本commit哈希值 新版本commit哈希值 ,哈希值可以是一部分。如果想对比老版本和新版本的差异,git diff 新版本 老版本即可
(2) 在demo.py文件中加入一行 print("Hello World!"),然后git add . ,这时候使用 git diff --staged,发现了提交到暂存区后的差异
(3) 使用git commit 提交到git 仓库后,发现git diff --staged没有内容
十一. rm删除文件
git restore --file 暂存之前:不将文件添加到暂存,老的git版本是git checkout -- <file>
git restore --staged <file> 暂存之后:删除文件的暂存,老的git版本是git reset HEAD <file>
git rm file 添加到git仓库之后:删除文件,本地和版本控制系统都删了
git rm --cached file 添加到git仓库之后:删除文件,版本控制系统删了,本地还存在,如果想重新提交可以使用 git add和git commit
git rm *.pyc
(1) 在demp.py中新增一行代码,执行 git status
(2) 执行git checkout -- demo.py后发现那一行消失了
(3) 重新加入一行print("Hey"),提交到暂存区,再从暂存区删除,最后使用git status查看状态
(4) git rm 测试报告.txt,发现删除了本地没有了,git rm --cached new_file.txt,发现删除了本地仍然存在
(5) git rm .*pyc,删除所有的.pyc文件
(6) 删除后要git commit 提交一下
十二. mv移动文件
git mv 老文件名 新文件名
等价:
mv 老文件名 新文件名
git rm 老文件名
git add 新文件名
(1) 先创建一个doc目录,将readme.txt移动到doc下,并改名字为read.txt,最后提交到git仓库
(2) 将demo.py移动到doc/下,新的路径为doc/demo.py
删除旧的demo.py
将新的doc/demo.py添加到暂存区
提交到git仓库
十三. 文件补录
git commit --amend 有时候提交过一次记录只有,又修改了一次,仅仅是改动一些较少的内容,可以使用git commit --amend
(1) 新增了一条代码,这时候使用git commit -amend -a提交到git仓库
(2) 可以使用git diff 老版本 新版本 查看新老版本的差异
十四. 标签
放在生产环境的版本,需要迭代,一般需要打标签
git tag -a tagname -m "提交信息" 附录标签
git tag tagname 轻量标签
git show tagname
git tag 显示所有的标签
git tag -a tagname 补录标签
git tag -l "v1.8*" 匹配所有以v1.8开头的标签
git tag -d tagname 删除某个标签
(1) 打附录标签
(2) 查看标签
(3) 打轻量标签
(4) 查看轻量标签
(1) 显示所有的标签
(2) 匹配所有以v开头的标签
(3) 使用git log,查看所有提交记录,想把Hello World这个提交打个标签,使用git tag -a v0.0.0 ed3350
(4) 删除某一标签qingliangv1
十五. checkout 检出
git checkout 版本号
git reflog 查看所有的日志
git checkout 标签名
(1) git checkout 版本号 检出到某一版本,此时使用git log,只能查看当前版本之后的记录
(2) 要想查看所有记录(包括之前的)使用 git reflog
(3) 根据标签名检出
十六. 别名
git config --global alias.st 'status' 给status起别名st
git config --global alias.last 'log -1 HEAD' 给查案最后一行记录起别名 git last
git config --global alias.logol 'log --pretty=oneline' 给一行显示所有记录起别名git logol (未生效)
(1) 给git status设置别名 git st
(2) 给查看最后一条记录,起别名git last
十七. github的使用
十八. git远程地址
git remote 查看远程地址
git remote -v
git remote add 名称 远程url
(1) 添加远程地址
十九. 远程push和pull
git remote show 远程名字
git push 远程名字 master(分支名称)
git fetch 远程名字
git pull 远程名字
(1) git remote show git_study
(2) git push 仓库名 分支名
(3) 在github项目下创建一个新的文件test_fetch,git fetch 远程名字,git fetcn通过用在多个分支的情况,它会手动进行分支的合并,在只有一个分支的情况下,建议使用git pull,git pull会自动合并
刚刚新的文件没有显示在本地,是因为没有合并
本地也有了
二十. 远程名字修改
git remote rename 旧名字 新名字
git remote rm 远程名字
(1) 修改远程名字为study
(2) 删除远程仓库
(3) 重新添加远程仓库
二十一. 克隆远程项目
git clone url
(1) 在本地新建一个new_project的目录,在里面打开git bash,然后使用git clone 项目url,可以克隆远程项目到本地