Git 快速使用手册(一)
一、概述
1.1 概念
Git是一个免费的、开源的分布式版本控制系统
,可以快速高效地处理小型到大型的项目。
❀ 什么是版本控制系统?
版本控制系统是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。
1.2 版本控制系统的分类
- 集中化的版本控制系统(例如SVN)
- 分布式的版本控制系统(例如Git,BitKeeper)
分布式版本控制系统的特点
- 客户端并不只是提取最新版本的文件,而是把代码仓库完整地镜像下来
- 可以指定和若干不同的远端代码仓库进行交互
- 利用索引记录版本之间的差异
二、Git 结构及代码托管中心
2.1 本地结构
2.2 代码托管中心
- 作用:维护远程库
本地库与远程库的交互
- 团队内部协作
- 跨团队协作
托管中心类型
- 局域网环境下:可以搭建GitLab服务器作为代码托管中心,GitLab可以自己去搭建
- 外网环境下:可以用Github或Gitee作为代码托管中心,不用自己单独搭建
三、Git 初始设置
3.1 基本设置
- 设置用户名和邮箱
# 设置用户名
git config --global user.name "Ning"
# 设置邮箱
git config --global user.email "242741154@qq.com"
# 查看
git config user.name
git config user.email
- 设置换行符的自动转换和安全检查
- 情况一:Git 可以在提交时自动地把回车(CR)和换行(LF)转换成换行(LF),而在检出代码时把换行(LF)转换成回车(CR)和换行(LF)。 可以用
git config --global core.autocrlf true
来打开此项功能。 如果是在 Windows 系统上,把它设置成true
,这样在检出代码时,换行会被转换成回车和换行:
# 提交时转换为LF,检出时转换为CRLF
git config --global core.autocrlf true
- 情况二:如果使用以换行(LF)作为行结束符的 Linux 或 Mac,则不需要 Git 在检出文件时进行自动的转换。当一个以回车(CR)和换行(LF)作为行结束符的文件不小心被引入时,如果想让 Git 修正,可以把
core.autocrlf
设置成input
来告诉 Git 在提交时把回车和换行转换成换行,检出时不转换(这样在 Windows 上的检出文件中会保留回车和换行,而在 Mac 和 Linux 上,以及版本库中会保留换行)。
# 提交时转换为LF,检出时不转换
git config --global core.autocrlf input
- 情况三:如果在Windows 上开发,且开发的是仅运行在Windows 上的项目,可以设置
false
取消此功能,把回车保留在版本库中:
# 提交检出均不转换
git config --global core.autocrlf false
- 你也可以在文件提交时进行safecrlf检查
# 拒绝提交包含混合换行符的文件
git config --global core.safecrlf true
# 允许提交包含混合换行符的文件
git config --global core.safecrlf false
# 提交包含混合换行符的文件时给出警告
git config --global core.safecrlf warn
建议:开发Java程序时,按照《Java开发手册》规定,建议执行
git config --global core.autocrlf input
命令,以便将所有换行符转换为LF
风格
3.2 初始化本地仓库
- 创建一个文件夹
- 用
Git Bash
进入该文件夹 - 执行
init
命令
git init
注意事项:不要任意修改
.git
目录下面的内容
四、Git 常用命令
4.1 add
和commit
命令
- 作用:将工作区内容同步到暂存区,以及将暂存区内容同步到本地库
测试:
- 创建一个文本文件
- 将文件提交到暂存区
touch Demo.txt
git add Demo.txt
- 将暂存区的内容提交到本地库
git commit -m "这是我提交的第一个文件 Demo.txt" Demo.txt
注意事项:
- 不放在本地仓库的文件,Git不予管理
- 本地仓库内,只有执行过
add
和commit
命令的文件,Git才会管理
4.2 status
命令
- 作用:查看工作区和暂存区的状态
测试:
- 执行
status
命令
- 创建新的文件
- 再次执行
status
命令
- 执行
add
命令
- 再次执行
status
命令
- 执行
commit
命令,之后再执行status
命令
- 修改
Demo2.txt
文件中的内容,再查看状态
- 重新添加到暂存区,并提交至本地库
- 查看最终的状态
4.3 log
命令
- 作用:查看提交记录(由近及远)
当现实记录较多时,该日志有分页效果
下一页:
(空格)
上一页:
b
到尾页会显示
(END)
退出:
q
# 日志展示方式
# 方式1
git log
# 方式2
git log --pretty=oneline
# 方式3
git log --oneline
# 方式4
git reflog
补充:
-p
或--patch
选项 ,会显示每次提交所引入的差异(按补丁的格式输出)也可以限制显示的日志条目数量,例如使用
-2
选项来只显示最近的两次提交
4.4 reset
命令
- 作用:前进或后退历史版本
当前版本状况
插曲:
可以注意到最后一次提交的msg本应写为insert ccc
,却错写成了insert bbb
,这时可以采用git commit --amend -m "new msg"
命令进行修改
可以看到最后一条提交记录的msg,变成了insert ccc
,不过reflog
中还可以看到原来的msg
测试:
- 执行
git reset --hard [index]
- 查看
reflog
reset
命令的参数:
--hard
: 本地库指针移动时,重置暂存区和工作区
--mixed
: 本地库指针移动时,重置暂存区
--soft
: 本地库指针移动时,暂存区和工作区都不动
4.5 删除文件及文件找回
测试:
-
新建文件
Test2.txt
,添加并提交到本地库 -
删除工作区中的
Test2.txt
-
同步
Test2.txt
的情况到本地库
- 查看日志
- 找回本地库删除的文件(实际上就是回滚到删除前的历史版本)
提示:
- 当工作区文件删除后未同步,或者只同步到了暂存区时,也可采用
reset --hard
命令,回滚到未删除时的版本- 当对文件内容进行修改后,只同步到暂存区时,可以采用
git restore --staged [filename]
命令来撤销同步操作
4.6 diff
命令
测试:
- 创建文件
Test3.txt
,添加到暂存区并提交到本地库
- 更改工作区中
Test3.txt
以及Demo2.txt
的内容,执行git diff
总结:
git diff [filename]
比较的是工作区和暂存区中指定文件的差异
git diff
比较的是工作区和暂存区中所有文件的差异
git diff [revision] [filename]
比较的是工作区和历史版本中指定文件的差异