git经常使用命令(测试必备)

什么是git

百度百科:Git(读音为/gɪt/)是一个开源的分布式版本控制系统,能够有效、高速地处理从很小到很是大的项目版本管理。html

git相对svn,有不少优点,这里就再也不赘述,你们网上搜索吧。git

git的操做流程是:好比咱们在本地对项目作更新操做,到最后推送到远程仓库,须要经历这几个步骤:ssh

  0.在工做区更新项目分布式

  1.添加到暂存区(add)svn

  2.提交到本地仓库(commit)测试

  3.推送到远程仓库(push)fetch

git安装

详见:http://www.javashuo.com/article/p-bjtfuclu-bc.htmlspa

git基础命令

虽然有git客户端,可是建议仍是用命令进行操做,由于命令会了,一个简单的图形界面客户端是很easy的,信不信由你。版本控制

git --version,查看版本指针

git init,初始化本地仓库(建立一个文件夹,进入这个文件夹,执行git init)

新增文件

git status,查看状态

git add,将文件添加到暂存区

git commit,文件提交到本地仓库

提示:

git在commit前,须要初始化配置:设置仓库人员的用户名和邮箱地址,这一步必不可少(参考:http://www.javashuo.com/article/p-bycuwwmb-gk.html

  git config --global user.name "uncleyong"

  git config --global user.email "168632201@qq.com"

再次执行commit操做

git push,推送到远程仓库

由于咱们尚未关联远程仓库,因此暂时不执行

先在远程仓库上建立一个项目(若是没有帐号,能够注册一个,https://gitee.com

输入仓库名称,而后保存便可

复制远程仓库地址:https://gitee.com/UncleYong/git_test.git

git remote add添加远程仓库,origin能够理解为一个别名

推送到远程仓库

master表示推送到master分支(主干分支),-f参数,就是表示强制,因为咱们建立的是空项目,因此哪怕里面有内容,也会被覆盖掉(因此,这个参数要慎用

输入帐号

输入密码(也能够配置ssh通讯方式,这样能够不用每次都输入密码:http://www.javashuo.com/article/p-cvujuhyk-gq.html

推送成功

访问:https://gitee.com/UncleYong/git_test

能够看到,刚刚新增的test.txt文件已经被推送到远程仓库

可是,一般,项目不是咱们建立的,那么:

  若是咱们本地没有这个项目,咱们就要先把项目拉到本地,git clone,作了更新后,再走上面的流程

  若是咱们本地已经有这个项目,可是可能不是最新了,好比你的同事往远处仓库提交了代码,此时,你本地的也作了修改,可是还没提交,可是你要把远程的拉下来,

    操做方式一:git pull,会把你作的修改覆盖掉,因此不推荐,除非你不想保留你的修改

    操做方式二:先git fetch,而后git merge将远程的变动合并到本地仓库(下面的分支合并详细讲解)。

git提交更改

克隆空项目,从头开始

test2.txt提交到暂存区

git reset HEAD 文件名,移除提交到暂存区的文件

git reset HEAD^ 或者 commitid,取消上一次的提交

把以前的提交了

两次提交记录

 变成一次提交记录了

把上次的提交了

git reset --soft  HEAD^:回到上次提交前的状态,也就是暂存区的状态

第二次提交没了,可是文件在暂存区

下面结果说明,执行git reset --soft后,工做区和暂存区的内容不会改变

修改提交信息,再次提交记录

另外,还有下面两个,你们本身实践吧。

git reset --mixed (默认选项)将HEAD指向指定的提交,暂存区的内容随之改变,工做区内容不变

git reset --hard 将HEAD指向指定的提交,暂存区跟工做区都会改变

把以前的提交了

git reset --hard HEAD^

 

git分支

每一个项目,通常有多个分支,好比master(主干分支)、开发分支、测试分支、生产bug分支等等,一个分支不受其它分支的影响,

可是,分支越多,后期合并分支的成本越大,因此,不要随便建立没必要要的分支。

建立分支:git branch 分支名,分支名不要包含特殊符号,好比*,/,等等,要见其知意,另外,还能够建立并切换分支:git checkout -b 分支名

查看全部分支:git branch,分支前面有*号的表示该分支为当前所在分支

修改分支名:git branch -m 旧分支名 新分支名

切换分支:git checkout 分支名

删除分支:git branch -d 分支名,可是不能删除当前所在的分支

切换到master再删除

 

git log

用于查看提交历史(commit的记录),显示的顺序是由近到远

显示的log的含义:

commit id,每一个id都是惟一的

Author,初始化时候的配置信息,做者及邮箱

Date,提交日期

xxx,commit -m的提交说明

查看最近n次的提交:git log -n,n是数字

查看指定做者的提交,若是没有,就显示空:git log --author xxx

概要显示:git log --oneline 

git log --graph,一条线串联整个提交历史

显示最近n次提交的不差别:git log -p -n,n是数字

git diff

克隆空项目,从头开始

比较工做区和暂存区的差别(若是暂存区没有,就和当前分支本地仓库比较):git diff

比较暂存区和工做区的差别:git diff --cached

比较工做区和当前分支本地仓库的差别:git diff HEAD,HEAD是指向当前分支的指针

 

新增文件

若是暂存区和当前分支本地仓库都没内容,执行git diff,结果就为空

提交到本地仓库

下面执行的git diff结果为空,由于工做区为空

修改文件

上面修改后,不add

结果说明:若是暂存区没有内容,可是当前分支本地仓库有内容,执行git diff,是工做区和本地仓库对比,

add后,git diff没有结果,由于工做区为空

下图表示暂存和当前分支本地仓库对比

再次修改

上面修改后,不add

下面执行结果说明:  

  若是暂存区有内容,无论当前分支本地仓库是否有内容,执行git diff,是工做区和暂存区对比,

  若是暂存区没有内容,可是当前分支本地仓库有内容,执行git diff,是工做区和本地仓库对比,  

 工做区和当前分支本地仓库对比

 

把上面的都提交了

 

查看当前分支跟指定的分支的差别:git diff 分支名

建立并切换到test分支

而后修改文件

和master分支比较

 

查看两个指定分支(已提交的)的差别(后者和前者的差别):git diff 分支名1 分支名2

提交前,没有输出结果

提交后,有输出结果

 

查看指定文件的差别(比较工做区和暂存区):git diff 文件名

修改

 

列出两个历史提交的差别(后者与前者相比):git diff commitid1 commitid2

 

git diff --stat,列出有变动的文件,不显示变动的具体内容

也能够比较两个分支(后者与前者相比)

补充,git diff结果的含义

diff --git a/text.txt b/text.txt,表示文件text.txt的两个版本
--- a/text.txt,---表示更改前的文件
+++ b/text.txt,+++表示更改后的文件
@@ -2,3 +2,4 @@ hello test,文件差别的区域,-2,3表示变动前从第2行开始,到第3行,+2,4表示变动后从第2行开始,到第四行
第一次修改
第二次修改
test分支:第一次修改
+test分支:第二次修改,+表示新增了一行,-表示删除了一行,若是对一行内容进行修改,在此处体现出来的就是先删除一行,再新增一行

分支合并&冲突解决

git merge 分支名,表示用指定分支和当前分支进行合并

克隆空项目,从头开始

再建立一个文件并提交

建立并切换到分支test

修改文件

提交

切换到master分支,test2.txt内容没有变

合并分支,而后能够看到test分支修改的内容

 

切换到test分支

修改文件

提交

 

切到master分支

修改同一个文件

提交

合并test,产生冲突

文件内容

 

最终改成test分支上的

提交

查看冲突的文件:git diff --name-only --diff-filter=U

回退并查看冲突文件

相关文章
相关标签/搜索