git文件4区和5状态
git的4个区
- 工作区(Working Area)
相当于我们的工作空间目录,我们代码本地存放的地方
- 暂存区(Stage)
也称作Index, 用来跟踪已暂存的文件,一般是.git下的index文件,有时也称暂存区为索引
- 本地仓库(Local Repository)
- 远程仓库(Remote Repository)
git的5种状态
- 未修改(Origin)
- 已修改(Modified)
- 已暂存(Staged)
- 已提交(Commited)
- 已推送(Pushed)
git添加文件
一般情况下,我们会用.或*来提交,表示的是所有,是一种正则表达式
不加参数默认为将修改操作的文件和未跟踪新添加的文件添加到git系统的暂存区,注意不包括删除:
git add *
git add .
拓展:
git add -u .
-u表示将已跟踪文件中的修改和删除的文件添加到暂存区,不包括新增加的文件,注意这些被删除的文件被加到暂存区再被提交并推送到服务器的版本库之后这个文件就会从git系统中消失了。
git add -A .
-A表示将所有的已跟踪过的文件的修改与删除和新增的未跟踪的文件都添加到暂存区
git合入patch的两种方式
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
- 这个命令会自动合入不冲突的代码,然后保留冲突的部分,同时会生成后缀为.rej的文件,用户保存没有合入的部分,可以参考这个进行冲突解决
- 解决完冲突后,删除后缀为.rej文件,并执行git add .添加改动到暂存区
- 最后执行git am --resolved或git am --continue
备注:在打入patch冲突时,可以执行git am --skip跳过此次冲突,也可以执行git am --abort回退打入patch的动作,还原到操作前状态。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CQvH1l3P-1679290803957)(C:\Users\wenfei\AppData\Roaming\Typora\typora-user-images\image-20220708172546622.png)]
- 工作区中的文件初始的状态是未修改,当我们修改文件后,其状态改变为已修改,git diff可以查看已经修改但未暂存的文件。(git diff后输入q可以退出)
- 通过git add命令可以把已修改的文件添加到暂存区,git diff --cached可以查看已暂存,但未提交的文件。
- 通过git commit进行代码提交到本地仓库,git diff {本地分支} {远程分支}可以查看已提交本地,但未推送到远程的分支。
- 通过git push命令将本地分支推送到远程分支。
git 回退命令
git reset是回退的具体命令,有几个更细致的参数:
--soft
、
--mixed
以及
--hard
是三个恢复等级
- 使用
--soft
就仅仅将头指针恢复,已经add的暂存区以及工作空间的所有东西都不变。 - 如果使用
--mixed
,就将头恢复掉,已经add的暂存区也会丢失掉,工作空间的代码什么的是不变的 - 如果使用
--hard
,那么一切就全都恢复了,头变,aad的暂存区消失,代码什么的也恢复到以前状态。
下面进行具体的 回退操作命令:
- git reset --hard : 进行已修改或者暂存,但未提交文件的回退
- git reset --hard origin/master : 进行已提交,但未推送的版本的回退
- git reset --hard HEAD^ 2 : git push -f 这两条命令是进行已提交且推送的回退,git reset --hard HEAD^为先回退到上一个版本,git push -f是进行强制推送,覆盖远程分支
上面的–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 reflog
git log用来查看git的提交记录,但不能查看已经删除的记录
git reflog命令可以查看所有分支的操作记录(包括commit和reset的操作),包括已经删除的commit记录
git 远程覆盖本地
- git fetch 只是下载远程库的内容,不做任务的合并
- git reset 把HEAD指向刚刚下载的最新版本
repo 切换分支:
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
版权归原作者 ll是个笨蛋 所有, 如有侵权,请联系我们删除。