1 啥是git
git是一个代码的历史版本管理工具,通过用树形结构管理一个代码版本可以快速实现回滚等操作
1.1 git基本概念
-
工作区(Working Directory/Working Tree):
- 这是你当前正在处理项目文件的地方。你可以在工作区中创建、修改、删除文件,这些改动是未被追踪或提交到版本控制系统中的。
-
暂存区(Staging Area/Index):
- 暂存区是一个临时区域,你可以将工作区中的改动放入这里,以便在提交之前进行整理和准备。可以理解为一个待提交的快照。当你运行
git add
命令时,文件的改动被添加到暂存区。
- 暂存区是一个临时区域,你可以将工作区中的改动放入这里,以便在提交之前进行整理和准备。可以理解为一个待提交的快照。当你运行
-
版本库(Repository/Local Repository):
- 版本库是项目的历史记录,包含了所有提交的历史快照。版本库存储在本地机器上,并且包含所有已提交的更改记录。你可以通过
git commit
命令将暂存区中的内容提交到版本库中,从而生成一个新的提交历史记录。
- 版本库是项目的历史记录,包含了所有提交的历史快照。版本库存储在本地机器上,并且包含所有已提交的更改记录。你可以通过
2 git常用命令
2.1 设置信息
git config --global user.name # 设置用户名
git config --global user.email # 设置全局邮箱
信息设置在了~/.gitconfig中
2.2 将一个文件夹配置成仓库
git init
所有的信息放在了.git/隐藏文件夹中,此文件夹是一个树状结构
git status # 可查看仓库状态,看文件有无存进暂存区等
git add # 将文件加进暂存区
git add . # 全部加进去
2.3 将历史版本存进版本库里
git commit -m 备注
更新代码
git status
git add 更改文件名
此时在输入git status,当文件名变绿说明已经放进了暂存区,输入git commit -m则表明永久存下来,放入了新节点
具体操作的结果如下图所示:
2.4 查看某个文件与当前分支最新的版本区别(暂存区里最新版本的区别)
git diff 文件名
2.5 从暂存区删除
git rm --cached xxx
git restore --stage
两者的区别在于,前者属于不希望管理该文件,将文件从列表中删除出来,后者输运仍管理文件,但从暂存区中取出
2.6 查看当前分支(从最初起点走到当前head的路径)的所有版本
git log
顺序从下向上显示,按q退出
--pretty=oneline
实现一行显示
2.7 往前回滚某一个历史记录
git reset --hard HEAD^
git reset --head HEAD ~
一个~一个版本,两个^^两个版本,~与^相同
回滚并不会将内容删掉
实现回退回来:
git reflog # 查看HEAD指针的所有的移动记录
在给出的移动记录中,会有每一个点的编号,即哈希值前7位
回滚到任意结点
git reset --head 版本号
重点:git log与git reflog的区别
git log从起点到当前head节点的路径
git refloghead的所有的移动历史节点
恢复文件
主要的背景是:当前文件修改放在暂存区,但是想恢复到未修改前的状态
下面是将文件未存入暂存区的删除
git checkout - 文件名 或 git restore 文件名
其中git restore并非回滚到上一个历史版本,而是从工作区回滚到暂存区版本
如果回滚到暂存区后,暂存区也不想留,可输入以下命令
git restore --stage 文件名
2.8 持久化
git commit -m # 将暂存区持久化
commit可以只一部分,具体操作如下图所示:
2.9 删除文件
一开始,与一般的文件命令管理一样
rm 文件
在文件删除的操作完成后,需要进行持久化
如果文件不小心删除,要回滚回去
git restore 文件名
前提是:修改文件已经从暂存区中拿出