git的4个区
工作区(Working Area)
相当于我们的工作空间目录,我们代码本地存放的地方
暂存区(Stage)
也称作Index, 用来跟踪已暂存的文件,一般是.git下的index文件,有时也称暂存区为索引
本地仓库(Local Repository)
远程仓库(Remote Repository)
git的5种状态
一般情况下,我们会用.或*来提交,表示的是所有,是一种正则表达式
不加参数默认为将修改操作的文件和未跟踪新添加的文件添加到git系统的暂存区,注意不包括删除:
git add *
git add .
拓展:
git add -u .
-u表示将已跟踪文件中的修改和删除的文件添加到暂存区,不包括新增加的文件,注意这些被删除的文件被加到暂存区再被提交并推送到服务器的版本库之后这个文件就会从git系统中消失了。
git add -A .
-A表示将所有的已跟踪过的文件的修改与删除和新增的未跟踪的文件都添加到暂存区
1. 两种补丁方案
Git 提供了patch和diff两种补丁方案
diff
git diff生成的是unix准的补丁.diff文件。只会记录文件改变的内容,只会记录文件的差异内容,不会记录commit信息,多个commit可以合成一个diff文件。
patch
git format-patch生成的是git专用的.patch文件。带有记录文件改变的内容和commit信息,每个commit对应一个patch文件。
2. 生成patch 文件的常用命令
2.1 找到commit id
在生成补丁文件之前,一般要通过git log命令找到commit id,然后使用如下命令将该笔commit生成patch
git format-patch commitID -1
**2.2 ** 某笔提交(包含)之前的几次提交
git format-patch commitID -n
n指从commitID对应的commit开始算起n个提交
**2.3 **某两笔(包后不包前)提交之间的所有提交
git format-patch commitID1..commitID2
**2.4 **某笔提交(不好含当前)以后所有的提交
git format-patch commiID
3. 生成diff文件常用命令
**3.1 **某两笔(包前包后)提交之间的所有提交
git diff commitID1 commitID2 > patch.diff
**3.2 **将单个文件做成一个单独的补丁
git diff testFile > patch
**3.3 **将工作区与版本库的差异做成补丁
git diff --HEAD > patch
**3.4 ** 将暂存区与版本库的差异做成补丁
git diff --cached > patch
4.合入patch和diff文件的常用命令
**4.1 **检查patch/diff能否正常打入
git apply --check file.patch/diff
**4.2 **打入patch/diff
git apply file.patch/diff
git am file.patch
**4.3 **解决冲突
如果在合入patch的过程中报错了,可以使用下面命令
git apply --reject file.patch
备注:在打入patch冲突时,可以执行git am --skip跳过此次冲突,也可以执行git am --abort回退打入patch的动作,还原到操作前状态。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CQvH1l3P-1679290803957)(C:\Users\wenfei\AppData\Roaming\Typora\typora-user-images\image-20220708172546622.png)]
git reset是回退的具体命令,有几个更细致的参数:
--soft
、--mixed
以及--hard
是三个恢复等级
--soft
就仅仅将头指针恢复,已经add的暂存区以及工作空间的所有东西都不变。--mixed
,就将头恢复掉,已经add的暂存区也会丢失掉,工作空间的代码什么的是不变的--hard
,那么一切就全都恢复了,头变,aad的暂存区消失,代码什么的也恢复到以前状态。下面进行具体的 回退操作命令:
上面的–hard可以替换成其他的恢复等级,一般用–soft, 这样一些修改的内容就不会丢
git reset --hard head : 当前版本
git reset --hard HEAD^ :回退到上一个版本
git reset --hard HEAD^^ : 回退到上上一个版本
git reset --hard HEAD~3 : 回退到往上三个版本
git reset --hard HEAD~10 : 回退到往上10个版本
git reset --hard commitID : 回退到指定版本号
git log用来查看git的提交记录,但不能查看已经删除的记录
git reflog命令可以查看所有分支的操作记录(包括commit和reset的操作),包括已经删除的commit记录
git 远程覆盖本地
repo start 分支名 --all 建分支
repo upload . 提交
方式一
repo init -b branch-name
repo sync
repo start branch-name --all
方式二
repo forall -c git checkout -b branch-name
repo abandon branch-name