Git常用命令总结

一、Git工作区域

工作区(Working Directory)

就是你平时存放项目代码的地方

暂存区(Index / Stage)

暂存区是工作区用来提交更改(commit)前可以暂存工作区的变化(用于临时存放你的改动),事实上它只是一个文件,保存即将提交到文件列表信息

Git仓库(Repository)

安全存放数据的位置,这里面有你提交到所有版本的数据,受版本控制

三者也可以如下理解,

  • Directory:使用Git管理的一个目录,也就是一个仓库,包含我们的工作空间和Git的管理空间。
  • WorkSpace:需要通过Git进行版本控制的目录和文件,这些目录和文件组成了工作空间。
  • .git:存放Git管理信息的目录,初始化仓库的时候自动创建。
  • Index/Stage:暂存区,或者叫待提交更新区,在提交进入repo之前,我们可以把所有的更新放在暂存区。
  • Local Repo:本地仓库,一个存放在本地的版本库;HEAD会只是当前的开发分支(branch)。
  • Stash:隐藏,是一个工作状态保存栈,用于保存/恢复WorkSpace中的临时状态。

二、Git基本工作流程

工作流程:

(1)在工作目录中添加、修改文件;

(2)将需要进行版本管理的文件放入暂存区域;(git add file)

(3)将暂存区域的文件提交到git仓库。(git commit -m "描述信息")

          因此,git管理的文件有三种状态:已修改(modified),已暂存(staged),已提交(committed)

 git reset --files 用来撤销最后一次git add files,你也可以用git reset撤销所有暂存区域文件。(操作对象是HEAD)

 git checkout --file 把文件从暂存区域复制到工作目录,用来丢弃本地修改。

三、Git配置 

1.git config -l 

 

 (也可以是git config --list,查看现在的git环境详细配置)

查看不同级别的配置文件

#查看系统config
git config --system --list
  
#查看当前用户(global)配置
git config --global  --list

#查看当前仓库配置信息 git config --local --list

 

 

 

 

 

 

 

2.git config --global user.name "your name"
  git config --global user.email "your email"

 

 

 (设置你的用户名称和e-mail地址)

 

注意:传递了--global 选项,就可以只做一次这个设置,处理你在系统中所做的一切操作。如果你希望在一个特定的项目中使用不同的名称或e-mail地址,你可以在该项目中运行该命令而不要--global选项。 总之--global为全局配置,不加为某个项目的特定配置。

3.git config [--local|--global|--system] section.key value

  git config [--local|--global|--system] --unset section.key

 

 

(添加、删除配置项 )

 

 

 四、Git操作

  4.1获得Git仓库:

 (a)创建全新仓库

# 在当前目录新建一个Git代码库
$ git init

 

 

 

 

当然如果使用如下命令,可以把创建目录与仓库一起完成:


# 新建一个目录,将其初始化为Git代码库
$ git init [project-name]

 

 

 

 

 

    (b)克隆远程仓库

# 克隆一个项目和它的整个代码历史(版本信息)
$ git clone [url]

 

 

 

比如我们要克隆的远程仓库托管在github上,地址为:https://github.com/liyifeng1994/ssm.git

 

  4.2、Git文件操作:

版本控制就是对文件的版本控制,要对文件进行修改、提交等操作,首先要知道文件当前在什么状态

4.2.1文件的4种状态

  • 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

4.2.2

4.2.2查看文件状态

#查看指定文件状态
git status [filename]

#查看所有文件状态
git status

 

 

 

 

 

4.2.3添加文件与目录

# 添加指定文件到暂存区
$ git add [file1] [file2] ...

# 添加指定目录到暂存区,包括子目录
$ git add [dir]

# 添加当前目录的所有文件到暂存区
$ git add .

 

 

 

 

 

 

4.2.4移除文件与目录(撤销add)

当执行如下命令时,会直接从暂存区删除文件,工作区则不做出改变(停止跟踪文件但不删除)

#直接从暂存区删除文件,工作区则不做出改变
git rm --cached <file>

 

 

 

移除所有未跟踪文件

#移除所有未跟踪文件
#一般会加上参数-df,-d表示包含目录,-f表示强制清除。
git clean [options] 

 

 

 

 

#只从stage中删除,保留物理文件
git rm --cached readme.txt 

#不但从stage中删除,同时删除物理文件
git rm readme.txt 

#把a.txt改名为b.txt
git mv a.txt b.txt 

 

 

 

 

 

 

4.2.5、查看文件修改后的差异

#显示WorkSpace中的文件和暂存区文件的差异
git diff [files]

 

 

 

 

---a表示修改之前的文件,+++b表示修改后的文件

#比较暂存区的文件与之前已经提交过的文件
git diff --cached
#比较repo与工作空间中的文件差异
git diff HEAD~n

 

 

 

 

 

4.2.6签出

如果仓库中已经存在文件f4.txt,在工作区中对f4修改了,如果想撤销可以使用checkout,签出覆盖

检出命令git checkout是git最常用的命令之一,同时也是一个很危险的命令,因为这条命令会重写工作区

#用暂存区中filename文件来覆盖工作区中的filename文件。相当于取消自上次执行git add filename以来(如果执行过)的本地修改

$ git checkout -- filename

 

 

 

 

4.2.7提交文件

通过add只是将文件或目录添加到了index暂存区,使用commit可以实现将暂存区的文件提交到本地仓库。

# 提交暂存区到仓库区
$ git commit -m [message]

# 提交暂存区的指定文件到仓库区
$ git commit [file1] [file2] ... -m [message]

# 提交工作区自上次commit之后的变化,直接到仓库区,跳过了add,对新文件无效
$ git commit -a

# 提交时显示所有diff信息
$ git commit -v
# 修改最后一次提交 # 如果代码没有任何新变化,则用来改写上一次commit的提交信息 $ git commit --amend -m [message] # 修改上一次commit,并包括指定文件的新变化 $ git commit --amend [file1] [file2] ...

 

 

 

 

 

 

 

 

 

 

 

 

 

 

#撤销上一次的提交

git reset --hard HEAD~1

 

 

 

4.2.8日志与历史

#查看提交历史
git log
#查看指定文件的提交历史
git log -p filename

#记录这个仓库中所有的分支的所有更新记录,包括已经撤销的更新
git reflog

#以列表方式查看指定文件的提交历史

git blame <file>

 

 

 

 

 

 

 

 

 

 

4.2.9删除文件

如果文件还是未跟踪状态,直接删除文件

删除已提交文件,-f 强制删除,物理删除了,同时删除工作区和暂存区中的文件

#撤销删除

git checkout -- <file>...

 

 

 

4.2.10文件操作总结

五、Git分支

5.1.1理解分支

分支在实际中有什么用呢?假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了。如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险。

现在有了分支,就不用怕了。你创建了一个属于你自己的分支,别人看不到,还继续在原来的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工作。

5.1.2分支命令

# 列出所有本地分支
$ git branch
# 新建一个分支,但依然停留在当前分支
$ git branch [branch-name]
# 新建一个分支,并切换到该分支
$ git checkout -b [branch]

# 切换到指定分支,并更新工作区
$ git checkout [branch-name]
# 切换到上一个分支
$ git checkout -
# 合并指定分支到当前分支
$ git merge [branch]
# 删除分支
$ git branch -d [branch-name]   
#-D(大写)强制删除

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

六、Git GUI 操作

通过命令行可以深刻的理解Git,Git GUI或IDE插件却可以更加直观操作Git,常用的Git GUI有如下这些

6.1.1GitHub for Desktop

由全球开发人员交友俱乐部提供的强大工具

6.1.2Source Tree

老牌的Git GUI管理工具了,也号称是最好用的Git GUI工具。强大,功能丰富,基本操作和高级操作都设计得非常流畅,适合初学者上手,支持Git Flow。

6.1.3TortoiseGit

小乌龟,SVN的超广泛使用也使得这个超好用的Svn客户端成了几乎每个开发人员的桌面必备软件。小乌龟只提供Windows版本,提供中文版支持的。

 

 

 -------------此次博客就写完了,虽然总结的内容很多,写的也很累,但收获颇多,使自己又掌握新的一项技能,最后相信,一分耕耘一分收获。

 

posted @ 2019-08-31 23:31  jyd0124  阅读(354)  评论(0编辑  收藏  举报