git 的基本使用
文章目录
- 一、创建仓库并初始化
- 1、操作步骤
- 2、注意事项
- 二、工作区与版本库
- 1、Git 管理文件类型
- 2、Git 保存文件方式
- 3、工作区与版本库概念及操作
- 三、命令小结
- 四、版本回退与前进
- 1、相关概念
- 2、版本回退
- 3、版本前进
- 4、总结
- 五、撤销修改
- 1、场景 1
- 2、场景 2
- 3、场景 3
- 4、注意事项
- 六、管理修改
- 七、删除文件
- 1、删除文件操作
- 2、误删文件恢复
- 八、小结
一、创建仓库并初始化
1、操作步骤
- 创建仓库:使用
mkdir
命令创建目录,例如mkdir /Users/xiao/pro
。 - 初始化仓库:进入创建的目录,使用
git init
命令初始化,使该目录可被 Git 管理,如cd /Users/xiao/pro
后执行git init
。
2、注意事项
- 版本库概念:版本库(仓库,repository)可理解为一个目录,其中所有文件的修改、删除等操作都能被 Git 跟踪,方便追踪历史和还原。
- .git 目录:在仓库目录下执行
git init
后会生成隐藏的.git
目录,用于跟踪管理版本库,不要手动修改其中文件,否则会破坏 Git 仓库。 - Windows 系统:为避免问题,确保目录名(包括父目录)不包含中文。
- 命令执行位置:后续的
git
命令需在仓库目录下执行。
二、工作区与版本库
1、Git 管理文件类型
Git 主要管理文本文件,对文本文件的改动跟踪效果好,能精确记录每行的修改。而对于图片、视频等二进制文件,虽能管理,但无法跟踪具体变化,只能记录文件大小的改变。Microsoft Word 是二进制格式,版本控制系统无法跟踪其改动,建议使用纯文本方式编写文件,并使用 UTF - 8 编码。Windows 用户不要使用自带记事本编辑文本文件,建议使用 Notepad++ 并将默认编码设置为 UTF - 8 without BOM。
2、Git 保存文件方式
Git 每次提交版本保存的是文件内容的完整快照。对于已变化的文件,保存完整内容;未变化的文件只保存上一个版本的指针。Git 适合保存文本文件,能进行很好的压缩和差异分析;对于二进制文件,压缩比率低,占用空间几乎随提交次数线性增长。
3、工作区与版本库概念及操作
- 工作区:即仓库目录,是开发程序所在目录。提交版本后,Git 会自动检测自该版本之后仓库目录下文件的改动(增、删、改),可使用
git status
命令查看。例如:
cd /Users/xiao/pro
git status
echo "hello xiao" >> readme.txt
git status
- 版本库:即仓库目录下的
.git
目录,不属于工作区。将修改内容提交为新版本的步骤如下:- 添加到暂存区:使用
git add
命令,可添加单个文件(git add 文件 1
)、多个文件(git add 文件 1 文件 2
)或整个当前目录(git add .
),也可多次执行add
操作。 - 提交到版本库分支:使用
git commit -m '提交信息'
命令。执行该命令时,可能需配置用户和邮箱,使用git config --local user.name '用户名'
和git config --local user.email '邮箱'
进行配置。 - 查看版本记录:使用
git log
命令,若嫌输出信息多,可加上--pretty=oneline
参数。
- 添加到暂存区:使用
三、命令小结
- 创建并初始化仓库:
mkdir /Users/xiao/pro
cd /Users/xiao/pro
git init
- 设置用户与邮箱:
git config --local user.name 'xiao'
git config --local user.email 'xiao@example.com'
- 查看 Git 当前状态:
git status
- 将检测到修改的文件添加到暂存区:
git add 文件名
- 将暂存区的文件提交到版本库的分支:
git commit -m '提交信息'
- 查看提交记录:
git log
或git log --pretty=oneline
四、版本回退与前进
1、相关概念
创建 Git 版本库时,Git 自动创建 master
分支,git commit
是往 master
分支提交更改。版本库中有暂存区(stage 或 index)、master
分支以及指向 master
的指针 HEAD
,HEAD
指向当前在用版本。
2、版本回退
从当前版本回退到过去的版本,Git 仅将 HEAD
指向指定版本,并更新工作区文件。例如当前版本为版本 3,回退到版本 1 的操作如下:
- 查看版本信息:
git log --pretty=oneline
- 回滚到上一个版本:
- 方式 1:使用
HEAD^
表示上一个版本,HEAD^^
表示上上个版本,HEAD~n
表示上上上…n 个版本,如git reset --hard HEAD^
或git reset --hard HEAD~2
。 - 方式 2:使用
git log
查询出的commit id
号,如git reset --hard 353b5afb8784f0e19c8dab83be1cb97a93b13bd4
。
- 方式 1:使用
3、版本前进
从当前版本前进到未来的版本,当使用 git log
查看时,最新版本可能会不见。可使用 git reflog
查看命令历史,获取 commit id
后进行前进操作。例如当前版本为版本 1,前进到版本 3 的操作如下:
- 查看命令历史:
git reflog
- 前进到指定版本:
git reset --hard 87e199e
4、总结
- 使用
git reset --hard commit_id
可在版本历史之间穿梭。 - 回退版本前,用
git log
查看提交历史确定回退版本。 - 前进版本时,用
git reflog
查看命令历史确定前进版本。
五、撤销修改
1、场景 1
已提交不合适的修改到版本库,且未推送到远程库,可参考版本回退操作。
2、场景 2
文件内容已提交到版本库,之后修改并添加到暂存区,又再次修改。撤销操作如下:
- 执行
git reset HEAD
将文件从暂存区拿回工作区。 - 执行
git checkout --
将工作区的修改还原到上一次git commit
的状态。
3、场景 3
文件内容从未提交到版本库,修改并添加到暂存区,又再次修改。执行 git checkout --
将工作区的修改还原到 git add
时文件的内容。
4、注意事项
git checkout -- file
命令中的 --
很重要,没有 --
就变成了“切换到另一个分支”的命令。
六、管理修改
Git 跟踪并管理的是修改,而非文件。每次修改都需先 add
到暂存区,才能提交到版本库。例如:
echo "hello" > a.txt
git add a.txt
echo "world" >> a.txt
git commit -m "版本 1"
git status
git diff HEAD -- a.txt
可选择将后续修改也 add
到暂存区后再 commit
一个新版本,或先将多次修改合并 add
后再提交一个版本。
七、删除文件
1、删除文件操作
- 添加并提交文件:
git add test.txt
git commit -m "v1"
- 删除文件:可在文件管理器中删除或使用
rm
命令,此时工作区和版本库不一致,git status
会提示文件被删除。 - 从版本库中删除文件:使用
git rm
命令删除文件并git commit
,如:
git rm test.txt
git commit -m "remove test.txt"
也可先手动删除文件,再使用 git rm
或 git add
,效果相同。
2、误删文件恢复
若删错文件,可使用 git checkout -- test.txt
命令将误删的文件恢复到最新版本。但从来没有被添加到版本库就被删除的文件,无法恢复。
八、小结
git rm
用于删除文件。已提交到版本库的文件不用担心误删,但只能恢复到最新版本,会丢失最近一次提交后修改的内容。