实际工作中常用到的git命令

git这个东西是很博大精深的,对应的命令也是挺多的,具体的可以看官方手册,想要了解的可以看阮一峰的这篇博客,这边的开头介绍了git的远端仓库、本地仓库、暂存区以及工作区的概念,这一点对于理解git很重要。

这里,只介绍一下在我们日常工作中比较常用到的一些命令(对于老司机们,若是觉得以下命令有不对的,或者说是有更优的方式请指正一下,多谢)

1、下载安装git,可以直接到官网下载对应版本,官网见这里,除了下载git外。

2、还需要一个知识,就是cmd或者sh,毕竟在命令行里面,但不要怕,这里用到的命令不多,只有简单的几个,若是了解的话可以直接略过这部分。

cd dir1 //切换到dir1目录
cd dir1/dir2 //切换到dir1目录下的dir2目录,简单点来说就是支持一次向下切换到第N级目录
cd .. //回退到上一目录
cd / //回退到跟目录
E:  //切换到E盘根目录,这个是windows独有,也就是cmd命令
dir //列出当前目录下的文件和目录列表,windows下独有
ls //列出当前目录下的文件和目录列表,支持后面加参数,功能比较强大,shell下独有的(mac和linux自带shell,windows下利用一些shell工具貌似也支持,而git的bash就支持)

3、正式开始介绍git命令,拿到项目后,首先要用到的命令是clone,clone的地址就是我们拿到的git地址,拿从github上clone一个项目为例。

git clone https://github.com/zhangzhanhe/impress.js.git

clone的过程中,一般需要你输入账号和密码,若是确定你有这个项目的拉取权限,只要照常输入就可以了,若是没有找人问问,这里若是避免每次都输入账号和密码,可以采用ssh key的方式,具体操作可见参考这篇文章,其中生成完的ssh key配置到哪里,这个具体的git平台可能不一致,需要自己找找,一般应该也都在用户的配置里面。

4、项目clone下来了,接下来要做的操作应该是切换到你要开发操作的分支(由于默认clone下来的是master分支,严格来说master分支是不允许直接操作的),切换之前我们需要看一下远端都存在哪些分支,这里我们可以用如下命令来做。

git branch -a //这个命令会列出你本地和远端的所有分支,若是不想看远端的去掉参数-a

5、查看完分支后,现在就需要切换到对应分支了,这里可以用如下命令,来完成建立对应的本地分支(最初本地没有这个分支),并且将本地分支与远端分支关联(git push提交操作的时候默认提交到对应的远端分支),同时完成对应分支的切换。

git checkout -b dev origin/dev //dev是你要操作的分支,这个命令之后你再用git branch -a就能够看到你的本地分支多了dev分支,并且你当前的分支已经从其他分支(如master)变成了dev。

6、上一条目介绍的是你要操作的分支远端已经存在,但本地没有的情况下,接下来我们来介绍下另外两种情况,一个是远端和本地存在了,还有一种情况是本地和远端都不存在。先介绍第一种。

这里切换命令就简单多了,只需要:

git checkout dev //没错,就这么简单,你就完成了两个本地分支的切换

7、最后这种情况是远端和本地都没有,那么就需要你重新建立一个分支(这里备注一下,你在哪个分支新建分支,那么新建这个分支的默认代码就是当前分支的代码,所以实际操作中新建分支一般需要在master下面,并且在新建前执行拉取远端最新代码的操作–git pull),并将其推送的远端,所有操作都在这里:

git branch dev //新建dev分支
git checkout dev //切换到dev分支
git push --set-upstream origin dev //将本地的dev分支推送关联到远端dev(这里实际上还没有远端dev,只是告诉了git,若是这个往远端提交默认提交到远端的这里)
git push //这步是真正的提交,这步操作完成后,你就看到你在远端多了一个分支,可以用git branch -a来操作。

是不是也不复杂,这里加一个提示,其实,以上的第一二条命令可以合并。命令如下:

git checkout -b dev

其实除了上述三种情况,还有一种是本地存在但远端没有,这里的操作还是可以直接用git checkout切换分支,与本地和远端均存在完全一致,毕竟这个命令操作实际产生效果的在本地环境。

8、操作分支搞定了,这里我们就应该按照业务需求来修改代码了,修改完成代码之后,我们就要面临着提交代码,在提交代码之前,我们最好先查询一下代码的修改状态,也就是哪些文件被修改了,这里我们可以执行git status命令。

git status //若是你第一次操作这个,看到的应该是文件名称的红色列表,这些列表就是你更改了的文件,包含更改的和新建的,若是你对列表中的某个文件改动了什么东西不了解,那么你可以用git diff fileName,具体如下

git diff file1 //这里的file1需要并不是只是文件名,还要包含这个文件在git项目中的具体路径,简单点就是直接复制红色列表给出的路径就可以了

git diff //若是diff后面不加任何参数,那么会将工作区的所有文件和暂存区的做对比

备注下,若是除了红色列表,还给你列出了绿色列表~~不用怕,绿色是你已经添加到暂存区,但未提交的代码,就是执行了git add 操作,但未执行git commit操作~~那git add和git commit 又是啥?

9、git add紧接着上面的操作,你利用git status确定要修改的文件没有问题,需要将它们提交到git上面,这里首先要用到的就是git add .,add完成后,需要用到的就是git commit,具体如下:

git add file //这里是单独添加file文件,这种情况是你只想要将某一个文件或者某几个文件提交
git add . //将工作区所有更改的文件添加到暂存区

将代码加到暂存区后,我们可以用git commit将代码提到本地仓库。

git commit -m "这里是本次提交的注释" //这个命令就是提交到本地仓库了,双引号根据你本次提交的修改进行注释

备注:对于修改部分的内容(若是你要提交的修改包含了新建文件的部分,还是乖乖先add再commit吧),add和commit也可以进行合并成

git commit -am "这里是本次提交的注释" //只是在原有的m参数上加了一个a的参数

10、介绍完了提交,我们在开发的时候还会遇到一种情况,就是由于某些原因,我这波修改不要了,想要回退到未修改时的样子,这里的回退也分为几种情况,这里主要介绍未到本地仓库阶段的代码,存在于工作区和暂存区的。具体如下:

单个文件回退,且这个文件并非此次新增(此文件在本地仓库已经有记录了,是本地仓库,暂存区不算啊)

git checkout fileName

单个文件回退,且这个文件为此次新增,这个就简单了啊,直接到文件里面删除就可以了,根本不用git命令,命令行为

rm -f fileName

说了单个文件,再说多了文件,主要指的是不区分文件对整个暂存区和工作区做处理的。

先说已经到了暂存区的,这里只需要一条命令:

git reset --hard

接下来是在工作区的,这里分为两部分,一个是新增文件,一个是在现有文件修改,不论怎样,两条命令合在一起就搞定了

git reset --hard //这个是修改的文件回退了
git clean -df //这个是新增的文件,省的挨着个去rm了。

11、讲完了提交到本地仓库,接下来要讲一下如何提交到远端仓库,这里我们要用到git push 命令,一般来讲,若是按照我们上面介绍的部分,也就是你将本地分支与远端的某个分支做了关联,你只需要执行:

git push 

若是git push未成功,看一下提示,常见的情况有两种,一个是你的本地没有指定对应的远端,这个时候按照提示关联一下,一般来说会是这个命令

git push --set-upstream origin yourBranchName //强调啊@!!! 其中yourBranchName是你自己的分支名,不要直接沾上啊

另外一种就是代码冲突了,没啥好办法,先利用git status查看冲突的具体文件(其实提交的报错日志也有),看看谁的代码和自己冲突了,很明显的问题自己解决了,拿不准的一定要找对方沟通,待完全完全解决完冲突的部分后再利用git add和git commit提交解决冲突的部分,随后再git push提交。

12、说完了提交到远端仓库,还有一个很重要的命令是git pull,这个命令是拉取远端仓库的代码,这个命令记得要经常用,每次你准备修改代码的前都要执行一下git pull。顺便再说一下,对比git pull,上一条的git push应该在每次或者说每一个功能完成后来一次。

13、至此,提交和提交前的回退都完事了,最后在说一下上面提到过git diff命令,除了将暂存区和工作区的代码做对比,还可以对比两个版本的代码,还可以对比两个分支的代码,还可以对比两个版本单独的代码,总之很强大,我们现在就简单介绍一下吧。

首先,对比两个版本的代码,这里先介绍一下git log这个命令,这个可以列出来提交信息列表,列表中详细列出了每一次提交的commit hash值,时间以及注释信息,拿到两个不同的commit hash值,然后执行

git diff hash1 hash2 //这里hash1和hash2分别代表两个commit的hash值,这里备注一下,hash值一般取前8位就可以,若是你不放心多取一些也无所谓

以上命令会列出两个版本修改的详细信息,但若是更改的内容过多的话,会觉得很多很混乱,这个时候我们可以只列出不同文件的列表。信息如下。

git diff --name-status hash1 hash2

按照以上命令列完了不同文件的修改后,若是打算看单独某个文件的修改,执行如下命令便可:

git diff hash1 hash2 fileName

上面介绍完了两次提交版本的对比,接下来说一下两个分支的对比,其实分支和版本一样,只是将对应的commit hash换成分支名称即可,例如对比master分支和dev分支命令如下:

git diff master dev

13、然后,我们再说一下分支合并,比如我们要将dev分支合并到master分支,首先你需要在你要合并的两个分支下都执行一下git pull命令,保证你本地的两个分支代码都是最新的,这里若是发现有人提交了一些代码,但你不了解提交的内容应该先去沟通,沟通完成后我们利用git checkout命令切换到master分支,然后执行如下命令:

git merge dev //合并分支命令
git push //将完成合并的代码提交到远端仓库

备注:合并代码过程中可能会发生冲突,遇到冲突后解决办法与git pull命令遇到冲突后一致。

14、说了那么多分支的操作,“增”和“改”都包含了,最后还有一个删的操作,删的操作包含本地删除和远端删除。不论是本地删除还是远端删除,都不要在即将被删除的分支下操作,比如我们要删除dev分支,那么我们就需要利用git checkout到其他分支,比如master,然后执行如下命令:

git push origin :branchName //删除远端分支,branchName为要删除的远端分支的名字
git branch -D branchName //删除本地分支,branchName要删除的本地分支的名字

至此,完成了本地和远端分支的删除,但这里存在一个问题,若是其他人删除了远端分支,我们默认是获取不到远端分支本删除的状态的,为了让我们获取到我们需要执行一个如下命令:

git fetch -p origin

15、最后,说一下我们上线的时候有些版本会比较大,这类的版本我们可以打一个tag标记,目的是方便查找,然后我们这里就介绍一下打tag的命令,命令如下:

git tag -a tagName -m '这里是本次tag的注释’  //其中tagName是你的tag名称,引号里面的是注释内容
git push origin tagName //其中tagName是你的tag名称

总结:至此对应的介绍就到这里了,上面介绍的命令很多都有挺多参数的,例如git log,其在指定文件名后可以只看某个文件的提交记录~~~总之,这里我们只介绍了常用的部分,更加深入的部分请自行了解吧!

感谢看完指鹤文章,希望指鹤的文章对您有所帮助。

闲暇时,指鹤喜欢写一些文章,部分发表在了豆瓣,若是您对此感兴趣,您可以点击下面连接支持下指鹤,指鹤在此表示感谢了

绝命笔记 一封匿名信引发的追寻 迷案追凶 量子危机