git常用命令(测试必备)
什么是git
百度百科:Git(读音为/gɪt/)是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。
git相对svn,有很多优势,这里就不再赘述,大家网上搜索吧。
git的操作流程是:比如我们在本地对项目做更新操作,到最后推送到远程仓库,需要经历这几个步骤:
0.在工作区更新项目
1.添加到暂存区(add)
2.提交到本地仓库(commit)
3.推送到远程仓库(push)
git安装
详见:https://www.cnblogs.com/UncleYong/p/10767747.html
git基础命令
虽然有git客户端,但是建议还是用命令进行操作,因为命令会了,一个简单的图形界面客户端是很easy的,信不信由你。
git --version,查看版本

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

新增文件
git status,查看状态

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

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

提示:

git在commit前,需要初始化配置:设置仓库人员的用户名和邮箱地址,这一步必不可少(参考:https://www.cnblogs.com/UncleYong/p/6892171.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通信方式,这样可以不用每次都输入密码:https://www.cnblogs.com/UncleYong/p/6891958.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
回退并查看冲突文件

git常用命令(测试必备)的更多相关文章
- Git 常用命令详解
Git 是一个很强大的分布式版本管理工具,它不但适用于管理大型开源软件的源代码(如:linux kernel),管理私人的文档和源代码也有很多优势(如:wsi-lgame-pro) Git 的更多介绍 ...
- Git 常用命令详解(二)
Git 是一个很强大的分布式版本管理工具,它不但适用于管理大型开源软件的源代码(如:linux kernel),管理私人的文档和源代码也有很多优势(如:wsi-lgame-pro) Git 的更多介绍 ...
- 【转】 Git 常用命令详解(二)----不错
原文网址:http://blog.csdn.net/ithomer/article/details/7529022 Git 是一个很强大的分布式版本管理工具,它不但适用于管理大型开源软件的源代码(如: ...
- Git常用命令(转)
目前开发的新项目使用的版本控制工具基本用的都是Git,老项目用的还是Svn,网上Git资源也很多,多而杂.我整理了一份关于Git的学习资料,希望能帮助到正在学习Git的同学. 一. Git 命令初识 ...
- Git常用命令清单笔记
git github 小弟调调 2015年01月12日发布 赞 | 6收藏 | 45 5k 次浏览 这里是我的笔记,记录一些git常用和一些记不住的命令,这个笔记原本是基于 颜海镜的文章增加 ...
- 项目开发中git常用命令、git工作流、git分支模型
#新建代码库git init # 在当前目录新建一个Git代码库git init [project-name] # 新建一个目录,将其初始化为Git代码库git clone [url] # 下载一个项 ...
- Mac下配置git环境和客户端SourceTree+Git常用命令大全(Mac 10.12)
前言: 如果不想折腾,直接下载GitHub桌面端,高度集成git,不需要学习git的任何命令. https://desktop.github.com/ 一.配置git环境 1.上官网https://g ...
- Git常用命令和Git团队使用规范指南
转自:https://wsgzao.github.io/post/git/ 前言 在2005年的某一天,Linux之父Linus Torvalds 发布了他的又一个里程碑作品——Git.它的出现改变了 ...
- Git常用命令及方法
https://blog.csdn.net/web_csdn_share/article/details/79243308 Git常用命令及方法大全 下面是我整理的常用 Git 命令清单.几个专用名词 ...
- 10年阿里自动化测试架构师帮您收集的:git常用命令大全以及git原理图【泣血推荐,建议收藏】
一.Git分布式版本控制简介 Git 是一个很强大的分布式版本控制系统.它不但适用于管理大型开源软件的源代码,管理私人的文档和源代码也有很多优势.本来想着只把最有用.最常用的 Git 命令记下来, ...
随机推荐
- C++ 中文乱码的问题
乱码的根本原因就是字符串编码的方式也字符串解码方式不一致导致的, 而在我们平常用的编码编码方式一般都是utf-8以gbk之间的相互转换, 下面给出编码方式的转换代码 string UtfToStrin ...
- 雪花算法(snowflake)的JAVA实现
snowflake算法由twitter公司出品,原始版本是scala版,用于生成分布式ID,结构图: 算法描述: 最高位是符号位,始终为0,不可用. 41位的时间序列,精确到毫秒级,41位的长度可以使 ...
- flutter RN taro选型思考
当前RN已经成熟,但是依赖于大平台(JD.携程),小公司想开箱即用还是有困难的 纯Flutter还远未成熟,更多的是和原生进行混合 但是作为个体又想要在某一个点切入市场,就是需要作选择,基于当下及未来 ...
- cookie、session和token的概念
Cookie.Session和Token都是为了解决Web身份校验而产生的,这里对它们的概念做一个简单了解. Web身份校验的发展 很久很久以前,Web基本上就是文档的浏览而已.既然是浏览,作为服务器 ...
- scala基础题--函数可以没有返回值案例,编写一个函数,从终端输入一个整数,打印出对应的金字塔
函数可以没有返回值案例,编写一个函数,从终端输入一个整数,打印出对应的金字塔 import scala.io.StdIn object work02 { def main(args: Array[St ...
- 关于“关于C#装箱的疑问”帖子的个人看法 (原发布csdn 2017年10月07日 10:21:10)
前言 昨天晚上闲着无事,就上csdn逛了一下,突然发现一个帖子很有意思,就点进去看了一下. 问题很精辟 int a = 1; object b=a; object c = b; c = 2; 为什么b ...
- Dapper学习(一)之Execute和Query
Dapper是一个用于.NET的简单的对象映射,并且在速度上有着轻ORM之王的称号. Dapper扩展IDbConnection,提供有用的扩展方法来查询数据库. 那么Dapper是怎样工作的呢? 总 ...
- Delphi - TIdFTP 两个重要函数
TIdFTP 两个重要函数 项目开发过程中发现,直接对于服务器上的文件/路径进行处理,是很危险的事情,因为一旦文件/路径不存在,程序就会抛异常,影响客户体验.所以在对服务器上的文件/路径进行访问之前, ...
- Python【day 8】文件
一.文件操作 open(文件路径,mode='模式',encoding='utf-8')模式:r w a rb wb ab r+ w+ a+ r+b w+b a+b常用的:r w ab表示字节,处理费 ...
- JDBC注册驱动程序3种方式
以MySQL的驱动为例,介绍注册驱动程序的3种方式 1:Class.forName("com.mysql.cj.jdbc.Driver");// 加载数据库驱动 package c ...