本篇文章对git使用过程中的一些常用的命令进行总结以及记录,方便以后使用。
git相关概念
本节介绍git中相对重要的几个概念,帮助更加透彻理解git的工作模式和实现流程。(以下概念部分只是我对这些概念比较直观的理解,不是官方的直接定义)
工作区
工作区,即实际操作中我们能够编辑操作的最为直观的部分,一般我们在工作区进行内容或者项目的编辑,然后将工作区的内容add到暂存区(这个下面会讲到),最后将暂存区的修改commit到版本库中;恢复过程中,也可将版本库或者暂存区的内容恢复到工作区。
版本库
版本控制软件必须存在的部分,用来保存提交的各个版本内容。版本库中最为重要的概念就是暂存区;在git中,在版本库和工作区之间有存在一层“暂存区”,暂存区顾名思义就是暂时存放的位置,可以更加灵活的操作保存的版本,暂存区可以多次add,一次commit;commit之后的修改内容就到了版本库中,即本地最终的存放位置,此位置在git本地目录的.git文件夹中,默认为隐藏目录,具体信息可以查看该目录。
修改与文件
git中操作或者管理的是修改而不是文件,什么是修改,在git软件中怎么体现,这句话又该怎么理解?我们可以通过一个实验进行验证,将本地工作区的内容进行更改,add到暂存区中,此时再将工作区的内容进行第二次更改,这时运行commit命令,会发现在git的版本库中只有第一次的修改被提交了,这个时候就是体现了暂存区的重要性,最终修改文件没有生效提交,就是因为最终内容没有被add到暂存区中;这里的修改指的是文件的新建、修改、删除统一称为git中的“修改”。
fast forward模式
首先强调一点,在实际开发工作过程中,应该禁用这种模式;为什么要禁用这种模式,下面进行解释:在进行多分支管理融合的时候,如果不显示的指定,那么默认情况下,Git会以这种模式执行多分支的融合,但这种模式下,删除分支后,会丢掉分支信息,不能查看到分支融合时的历史信息了,仿佛没有融合过一样,这样就比较危险了,因此要避免这样的操作。
git 相关的命令
这一部分主要包括git使用过程中的添加、提交、回退、恢复、分支创建、合并、删除等一些操作的命令以及具体的参数;
git add
提交工作区修改到暂存区,最为常用的命令为git add .
,会将当前目录的所有修改全部添加到暂存区;如果要添加某个具体的文件可以加具体的文件名字。
git commit
提交暂存区的内容到版本库中,通过-m
参数来指定提交版本库中的注释内容,建议这个必须要有,方便别人查看修改,同时在版本回退的时候,这个东西也是一个重要的参考。
git push
将本地版本库推送至远程库,在运行时要指定远程库和本地分支;一般情况下远程库默认为origin
,推送的命令为git push origin master
master这里为本地的分支。
git reset
这个命令为回退操作,当发现误操作并且已经把误操作提交到版本库中后,通过该命令将版本库中的版本回退到前一个或者某一个版本,具体操作命令为git reset --hard HEAD^
,该命令为回退到前一个版本,在git中,当前版本的标识为HEAD,上一个版本就是HEAD^;也可以将版本回退到中间的某个版本,这个时候就需要知道中间的版本的ID,可以通过git log
(也可以指定参数--pretty=oneline
只显示比较简略的信息)来查看提交的历史版本git内部的编号,通过指定编号的前几位来恢复到中间版本。
git reflog
通过reset将版本回退到了中间版本,这是你发现退错了,你想要回退的这个中间版本的后面的版本,怎么办呢?使用这个命令,就可以查看到你提交的所有的版本的信息,包括你会退后的后面的版本信息,知道版本信息后,再通过git reset
就可以到达未来的版本了(强大)!
git diff
比较工作区和版本库中的不同,前提是没有指定具体的参数,并且修改的内容没有add到暂存区,如果进行了add操作,那么就会发现该命令的输出内容为空,如果add之后,又对文件进行修改,它直接比较的就是暂存区和工作区的内容;除非如下直接指定,git diff HEAD -- (file)
通过这种指定,则直接进行版本库和工作区的比较,而不考虑暂存区的内容;(中间的--
参数十分重要)。
git status
查看状态,会比较详细的列出暂存区和工作区的修改,方便我们进行状态的监控和知道哪些文件进行了修改。
git log
查看提交的状态,通过--pretty=oneline
参数来简化输出;在分支管理中,通过--graph
可以查看到分支合并的图结构(相关更多的操作还需要探索)。
git rm
进行文件的删除操作,当在本地工作区把文件删除后,面临两种操作:1、删除版本库中的文件;2、恢复工作区中的文件。如果要进行第一中操作时,使用该命令。
git checkout
修改的删除和分支的(创建)切换;这里指的修改的删除是指将内容从暂存区恢复到工作区,可以使用如下命令git checkout -- file
;同时也可以进行分支的切换如git checkout 分支
,添加-b
参数后就会创建该分支并且进行切换动作。
git branch
所有有关分支的操作都可以使用这个命令,查看分支、创建分支、删除分支,还有强行删除分支;这里强调一下删除为-d
,强行删除为-D
。
git merge
对不同分支的内容进行合并,合并时,先切换到低版本的分支,然后在该命令后加你要融合的分支,git merge 分支
,就会进行分支的融合了。当融合发生冲突时,就必须解决冲突后进行再进行融合,可以直接打开文件进行冲突的解决,文件中会标记出冲突的位置(具体可以实际操作一下)。
git clone
从远程库下载工程或者项目,比较简单(比较常用的就是GitHub)
git stash
保存当前工作现场,当前工作正在进行,突然其他工作介入,你不得不进行分支切换的时候可以使用该命令进行工作现场的保存;恢复命令用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;另一种方式是用git stash pop,恢复的同时把stash清空。
git show
可以对提交的修改进行显示,同时可以根据版本号查看具体的内容
git tag
进行标签的指定,git内部生成想序列号比较不容易理解,可以指定tag来对比较重要的提交进行版本的绑定。
git config
可以查看和设置git中的各种设置,例如在公司局域网中要设置代理上网,可以通过如下配置;
git config --global http.proxy
来查看代理配置;后面加上地址和端口就可以进行配置(注意要用引号引起来)
总结
git的功能相比svn还是强大了很多的,相关的细节还需要仔细地研究,本篇博客只是给出最为基本的操作。