一、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 |
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
|
当然如果使用如下命令,可以把创建目录与仓库一起完成:
|
(b)克隆远程仓库
# 克隆一个项目和它的整个代码历史(版本信息)
|
比如我们要克隆的远程仓库托管在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
|
#撤销上一次的提交 |
4.2.8日志与历史
#查看提交历史
git log
#查看指定文件的提交历史
|
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]
|
六、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版本,提供中文版支持的。
-------------此次博客就写完了,虽然总结的内容很多,写的也很累,但收获颇多,使自己又掌握新的一项技能,最后相信,一分耕耘一分收获。