Git基本知识和常用命令(IDEA)

311 阅读6分钟

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 文件状态的转变

  1. 新建文件--->Untracked
  2. 使用add命令将新建的文件加入到暂存区--->Staged
  3. 使用commit命令将暂存区的文件提交到本地仓库--->Unmodified
  4. 如果对Unmodified状态的文件进行修改---> modified
  5. 如果对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分支关联起来,在以后的推送或者拉取时就可以简化命令。