Git 是我们日常工作中使用频率极高的工具,下面呢,我就介绍一下Git的基本知识和常用命令,希望可以帮助大家快速度过新手期。
Git四个工作区域
- 工作目录(Working Directory)
- 暂存区(Stage/Index)
- 本地仓库/版本库(Local Repository 或 Git Directory)
- 远程仓库(Remote Repository)
Git 文件的四个状态
- Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged.
- Unmodify: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改, 而变为Modified.如果使用git rm移出版本库, 则成为Untracked文件
- Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存staged状态, 使用git checkout 则丢弃修改过, 返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改
- Staged: 暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态. 执行git reset HEAD filename取消暂存,文件状态为Modified
Git 文件状态的转变
- 新建文件--->Untracked
- 使用add命令将新建的文件加入到暂存区--->Staged
- 使用commit命令将暂存区的文件提交到本地仓库--->Unmodified
- 如果对Unmodified状态的文件进行修改---> modified
- 如果对Unmodified状态的文件进行remove操作--->Untracked
IDEA Git 文件颜色说明(IDEA)
IDEA配置了Git,加入Version Control(版本控制),会出现不同颜色的文件。 文件颜色只与工作区,暂缓区和本地仓库有关,与远程仓库无关。
- 红色:为加入版本控制,工作区文件没有添加到暂缓区。(没有git add)
- 绿色:已经加入版本控制暂未提交,工作区文件已经添加到暂缓区,没有添加到本地仓库。(已经git add 没有git commit)
- 蓝色:已经加入版本控制,已经提交,文件有改动,工作区文件已经添加到暂缓区 和 本地仓库,文件内容有改动。(已经git add 和 git commit)
- 白色:已经加入版本控制,已经提交,文件没有改动,工作区文件已经添加到暂缓区 和 本地仓库,文件内容有改动。(已经git add 和 git commit)
颜色变化:
红色 + add ->绿色 + commit -> 白色
白色 + modify(修改)-> 蓝色 + commit ->白色
Git常用命令
通常我们从远程仓库将项目代码clone到本地后,可以通过下面三个命令,完成创建开发分支的工作,从而开展coding工作。
本地分支:poxiao_20220405
远程分支:poxiao_20220405
新建本地分支
git branch poxiao_20220405
新建远程分支
git push origin 本地分支名(poxiao_20220405) ------将本地分支提交到远程仓库 (如果远程分支存在,直接使用下一条命令)
本地分支与远程分支关联
git branch --set-upstream-to=origin/ poxiao_20220405 poxiao_20220405
版本回退
命令格式:git reset --(soft | mixed | hard ) < HEAD ~(num) >
| 指令 | 作用范围 | 原有文件内容的变更 | 目录结构的变更(增加或者删除文件) |
|---|---|---|---|
| hard | 回退全部,包括HEAD,index,working tree | 修改内容还在,变成未add的状态 | 新增文件:还存在,变成未add的状态(目录结构中文件变成绿色,可以再次执行git commit );删除文件:目录结构中还是没有,可以直接执行git commit |
| mixed (默认) | 回退部分,包括HEAD,index | 修改内容还在,变成未add的状态 | 新增文件: 还存在,变成未add的状态(目录结构中文件变成红色,需要执行命令git add . 再执行git commit )删除文件:目录结构中还是没有,可以直接执行git commit |
| soft | 只回退HEAD | 修改内容丢失,修改的代码 不会变成未add的状态 | 新增文件丢失、删除的文件相当于没删 |
- HEAD:存储着当前工作区所处的某次commit,默认是上一次的commit
- working tree:工作区
- index:暂存区
注意: 谨慎使用 –hard 参数,它会删除回退点之前的所有信息。
HEAD 说明:
- HEAD 表示当前版本
- HEAD^ 上一个版本
- HEAD^^ 上上一个版本
- HEAD^^^ 上上上一个版本
- 以此类推...
可以使用 ~数字表示
- HEAD~0 表示当前版本
- HEAD~1 上一个版本
- HEAD^2 上上一个版本
- HEAD^3 上上上一个版本
- 以此类推...
init && clone
git init:在当前目录新建一个本地仓库git init [project-name]:在project-name这个目录下新建本地仓库git clone [url]:克隆一个远程仓库
status
git status [file-name]:查看指定文件状态git status:查看所有文件状态
add
千万别忘记 "." 这个字符
git add [file-name1] [file-name2] ...从工作区添加指定文件到暂存区git add .将工作区的被修改的文件和新增的文件提交到暂存区,不包括被删除的文件git add -u .u指update,将工作区的被修改的文件和被删除的文件提交到暂存区,不包括新增的文件git add -A .A指all,将工作区被修改、被删除、新增的文件都提交到暂存区
commit
git commit -m [massage]将暂存区所有文件添加到本地仓库git commit [file-name-1] [file-name-2] -m [massage]将暂存区指定文件添加到本地仓库git commit -am [massage]将工作区的内容直接加入本地仓库git commit --amend快速将当前文件修改合并到最新的commit,不会产生新的commit。在提交commit后发现还有部分文件修改忘记提交了可以是用该命令
注释:
加-m是指直接在后面写上版本的注释,不加-m的话会用一个vim打开文件让你写入massage,有未追踪的文件将会失败,需要add加入暂存区。
push
git push origin [branch-name]推送当前本地分支到指定远程分支,origin为默认的远程仓库名称。git push将文件添加到远程仓库。git push -u origin master:由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。