学习 git 已经有一段时间了,对 git 的基本指令也算是有一定的了解了,这里把比较常用的一些git指令列出来,方便查阅.
Git
Git 是一个开源的分布式版本控制系统,Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持, 通过 git 我们可以敏捷高效的对我们的项目进行管理。
Git 和 svn 的主要区别如下:
Git 是分布式的,SVN 不是:这是 Git 和其它非分布式的版本控制系统,例如 SVN,CVS 等,最核心的区别。
Git 把内容按元数据方式存储,而 SVN 是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似 .svn、.cvs 等的文件夹里。
Git 分支和 SVN 的分支不同:分支在 SVN 中一点都不特别,其实它就是版本库中的另外一个目录。
Git 没有一个全局的版本号,而 SVN 有:目前为止这是跟 SVN 相比 Git 缺少的最大的一个特征。
Git 的内容完整性要优于 SVN:Git 的内容存储使用的是 SHA-1 哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。
Git 的工作流
在学习 Git 的指令之前,有必要先了解一下 Git 的工作流,这样可以让我们更好的记住其指令,比单纯的死记硬背效果好很多,而且还可以让我们知道在什么情况下使用什么指令。
要理解这个工作流程图先理解下面几个概念:
工作区(workspace):就是存在你自己电脑上的目录。
暂存区(index):英文叫stage, 或index。一般存放在 “.git目录下” 下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
版本库(repository):工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库,版本库包含了暂存区和分支目录树。
他们三个的关系可以下图片来描述:
在网上看到过一个特别形象的 Git 工作流称和操作流程图,如下:
这个图体现了远程仓库(连接了一个远程的git服务器,用于托管代码,常用的托管代码的平台由Github–全球最大没有之一,国内效仿有了码云)于上面三者的关系,包括需要用到的一些指令。
Git 命令
了解了 Git 的工作流之后,我们可以将 Git 命令分为几个种类,以便于我们对其进行记忆:
工作区与暂存区的交互。
暂存区与本地仓库(分支)上的交互。
本地仓库与远程仓库的交互。
git管理配置的命令。
配置命令
在第一次使用 Git 时候需要使用的命令
-
配置用户名:
git config --global user.name "your name"
; -
配置用户邮箱:
git config --global user.email "youremail@github.com"
;
查询配置
-
列出当前配置:
git config --list
; -
列出repository配置:
git config --local --list
; -
列出全局配置:
git config --global --list
; -
列出系统配置:
git config --system --list
;
其他配置
-
配置解决冲突时使用哪种差异分析工具,比如要使用
vimdiff:git config --global merge.tool vimdiff
; -
配置git命令输出为彩色的:
git config --global color.ui auto
; -
配置git使用的文本编辑器:
git config --global core.editor vi
;
工作区相关命令
新建仓库
-
将工作区中的项目文件使用git进行管理,即创建一个新的本地仓库:
git init
; -
从远程git仓库复制项目:
git clone <url>
,如:git clone git://github.com/wasd/example.git
;克隆项目时如果想定义新的项目名,可以在clone命令后指定新的项目名:git clone git://github.com/wasd/example.git mygit
;
提交
-
提交工作区所有文件到暂存区:
git add
. -
提交工作区中指定文件到暂存区:
git add <file1> <file2> ...
; -
提交工作区中某个文件夹中所有文件到暂存区:
git add [dir]
;
撤销
-
删除工作区文件,并且也从暂存区删除对应文件的记录:
git rm <file1> <file2>
; -
从暂存区中删除文件,但是工作区依然还有该文件:
git rm --cached <file>
; -
取消暂存区已经暂存的文件:
git reset HEAD <file> ...
; -
撤销上一次对文件的操作:
git checkout --<file>
。要确定上一次对文件的修改不再需要,如果想保留上一次的修改以备以后继续工作,可以使用stashing和分支来处理; -
隐藏当前变更,以便能够切换分支:
git stash
; -
查看当前所有的储藏:
git stash list
; -
应用最新的储藏:
git stash apply
,如果想应用更早的储藏:git stash apply stash@{2}
;重新应用被暂存的变更,需要加上--index
参数:git stash apply --index
; -
使用apply命令只是应用储藏,而内容仍然还在栈上,需要移除指定的储藏:
git stash drop stash{0}
;如果使用pop命令不仅可以重新应用储藏,还可以立刻从堆栈中清除:git stash pop
; -
在某些情况下,你可能想应用储藏的修改,在进行了一些其他的修改后,又要取消之前所应用储藏的修改。Git没有提供类似于
stash unapply
的命令,但是可以通过取消该储藏的补丁达到同样的效果:git stash show -p stash@{0} | git apply -R
;同样的,如果你沒有指定具体的某个储藏,Git 会选择最近的储藏:git stash show -p | git apply -R
;
更新文件
- 重命名文件,并将已改名文件提交到暂存区:
git mv [file-original] [file-renamed]
;
查新信息
-
查询当前工作区所有文件的状态:
git status
; -
比较工作区中当前文件和暂存区之间的差异,也就是修改之后还没有暂存的内容:
git diff
;指定文件在工作区和暂存区上差异比较:git diff <file-name>
;