前言


最近在团队内部发起了一个小的python项目(用tkinter实现一个小工具),但是发现大家对git的使用还不太熟悉,不知道怎么同步代码、解决冲突等等。因为我觉得对测试工程师来说,git应该是必备技能,所以就帮大家整理下git最常用的命令及使用方法。

git的运用场景


  • 写接口或者UI自动化,代码可以提交到gitlab(或github),方便维护和管理。
  • 可以拉取开发的代码,进行白盒测试。
  • 可以检查开发的代码提交记录,预防提测时开发提交非相关需求。
  • 可以拉取github上的代码,学习别人的代码,便于己用。

git使用方法


为了便于大家理解,我就顺着平时的产品开发流程,结合具体的场景来介绍不同git命令的使用,假设现在有 A 和 B 两位同学一起开发一个新项目。

本地git配置:A、B两位同学都需要在本地对git进行配置,配置命令如下:

# 设置git的user name和email:
$ git config --global user.name "xxx"
$ git config --global user.email "xxx@gmail.com" # 配置ssh-key,然后一路回车
ssh-keygen -t rsa -C "xxxx@gmail.com"

这里对ssh-key做个说明,ssh-keygen是git自带的一个工具,执行上面的命令一路回车,会在~/.ssh/目录下生成id_rsa和id_rsa.pub。根据命名我们就可以看出以.pub结尾的是公钥,之后我们会将它配置到gitlab上;而id_rsa是私钥,只会存在你的本地。这一对公私钥的作用就是在访问gitlab服务器时,不需要输入密码,这样就可以方便的同步代码了(配置多个ssh-key的方法这里就不介绍了,大家可自行查询)。

【创建项目】:A同学首先去gitlab(github,公司一般都是自己搭建的gitlab)创建一个新的项目,比如叫projectA。创建方法其实比较傻瓜,只要登录到gitlab,就可以看到"New Project"的入口,跟着操作就好。

【初始化项目】:A同学在本地首先会初始化他们的项目(生成一部分初始化代码),比如目录是:/xuanke/code/projectA,然后通过命令行窗口,进入代码目录(以下命令全部在该目录下执行),执行如下命令:

$ cd /xuanke/code/projectA
$ git init
$ git remote add origin git@gitlab.xxx.com:xuanke/projectA.git
# 这里注意有空目录,默认git是不提交的,如果你想要提交空目录,需要增加如下操作(这句命令是将所有的空目录放到.gitkeep中):
# 另外需要注意,.gitkeep文件不要放到.gitignore文件中,要提交到git服务器上。
$ find . \( -type d -empty \) -and \( -not -regex ./\.git.* \) -exec touch {}/.gitkeep \;
$ git add .
$ git commit -m "初始化工程"
$ git push -u origin master

【clone代码到本地】:B同学为了开发项目,需要将gitlab服务端代码同步到本地:

# 同步代码, -b是可选的,用-b可以指定分支,不写-b,默认从master拉取代码
$ git clone (-b dev) git@gitlab.xxx.com:xuanke/projectA.git

【切换分支】:A同学告诉B同学,我们先在dev分支开发吧,最后提测到qa分支,发布到rc分支,先切换到dev分支:

# 切换分支
$ git checkout dev

【提交代码】:B同学这时就开开心心的开始编码了,代码写完之后,得提交到gitlab服务器:

# 提交代码
$ git add .
$ git commit -m "今天,我写了一个牛逼的功能"
# 提交代码前一定要pull一下代码
$ git pull
$ git push

这里说明一点:在执行git push命令之前的提交操作,都是在本地git缓存进行的,所以可以放心,不会影响到远端gitlab服务器代码。

【更新代码】:A同学得知B同学写了一个牛逼的功能,于是就想获取代码膜拜一下:

# 拉取同步gitlab服务器端最新的代码
$ git pull

【解决冲突】:A同学更新代码才发现,原来B同学也修改了Niubility.java文件,更新失败了,提示代码冲突了,这下爽歪歪了。不过千万别慌,我大概总结了下解决冲突的基本思路:

# 解决冲突方法
# . 首先找到冲突的文件,git 会提示你哪个文件冲突了。从网上拔了一段冲突日志(提示readme.txt冲突了):
$ git merge feature1
Auto-merging readme.txt
CONFLICT (content): Merge conflict in readme.txt
Automatic merge failed; fix conflicts and then commit the result. # . 打开readme.txt文件,查找有 <<<<< 的地方。可以全局搜索
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes of files.
<<<<<<< HEAD
Creating a new branch is quick & simple.
=======
Creating a new branch is quick AND simple.
>>>>>>> feature1 # . HEAD和========之间代表我们当前本地的代码,==========到feature1之间代表远端的代码,我们根据代码的时机情况进行编辑。但是最后需要将 >>>>>>> <<<<<<< ======= 这些都删除掉。,比如修改为这样。
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes of files.
Creating a new branch is quick AND simple.
# . 再次提交代码:
$ git commit -m "解决代码冲突"
$ git push

【忽略提交某些文件】:A同学发现,每次提交代码都会将ide的配置文件提交,而且经常和B同学的同一个配置文件冲突,其实可以通过在项目目录下添加.gitignore文件来实现:

# 以Python文件为例:
*.py[cod]
*.so
*.egg
*.egg-info
dist
build

这里介绍个方法,假如你想忽略某个文件,但是该文件已经被提交到gitlab服务器了,该怎么办呢? 可以先将文件从本地git缓存删掉,再提交就可以从gitlab服务器删除掉了。

# 从本地git缓冲区删除文件fileName
$ git rm --cached fileName

【合并分支】:A、B同学现在总共有四个分支:dev、qa、rc、master,现在他们开发完成了,需要将代码合并到qa分支提测了,该怎么操作呢?

# 首先,切换到qa分支
$ git checkout qa
# 其次,执行合并分支代码, 如果有冲突,参考上面解决冲突的流程
$ git merge dev

【其他常用命令】:上面基本已经涵盖了在工作中可能会用到的git命令,下面再整理一些其他常用命令:

# 能够查看本地的状况:有无修改提交的文件、都修改了哪些文件等等
$ git status
# 查看历史提交记录
$ git log
$ git log --author="xuanke"
# 将某个分支的某条提交,合并到当前分支。(这个用的少一些,估计有些开发也没用过。)
$ git cherry-pick 提交编号
# 删除本地的更改,回退到之前的版本,这个要谨慎操作
$ git reset --hard
# 删除本地的某个分支
$ git branch -d dev
# 切换并创建分支,主要加了-b参数
$ git checkout -b dev
总结

  • 上面介绍了大部分常用的git命令,基本掌握这些就够用了。不过平时的工作中,应该多使用,这样才能熟能生巧,运用自如。
  • 另外再强调下,一定要问开发要git的代码权限,哪怕看不懂,但起码也可以看他们每次提测的提交记录,这样可以知道都提交了哪些文件,修改了什么内容,可能会影响什么业务。之前碰到过非常荒唐的事情,开发一行代码都没改,就跟测试同学说:“你给我测一下吧”。所以,通过对git命令的掌握,可以帮助我们一定程度上提高提测的质量。

掌握git命令的正确使用姿势的更多相关文章

  1. Git Flow 的正确使用姿势

    https://www.jianshu.com/p/41910dc6ef29 Git Flow 的概念 在使用Git的过程中如果没有清晰流程和规划,否则,每个人都提交一堆杂乱无章的commit,项目很 ...

  2. git命令行工作的正确姿势

    git命令行创建并提交新分支到mater分支的常规步骤 git branch new_branch git status 查看修改的文件 git add changed_files git commi ...

  3. Git 提交的正确姿势

    Git 提交的正确姿势:Commit message 编写指南 SCOP范围 middleware core config plugin test type范围 Git 每次提交代码,都要写 Comm ...

  4. (转)Git 提交的正确姿势:Commit message 编写指南

    Git 每次提交代码,都要写 Commit message(提交说明),否则就不允许提交. $ git commit -m "hello world" 上面代码的-m参数,就是用来 ...

  5. 这才是使用ps命令的正确姿势

    这才是使用ps命令的正确姿势 前言 在linux系统当中我们通常会使用命令去查看一些系统的进程信息,我们最常使用的就是 ps (process status).ps 命令主要是用于查看当前正在运行的程 ...

  6. 30分钟Git命令入门到放弃

    git 现在的火爆程度非同一般,它被广泛地用在大型开源项目,团队开发,以及独立开发者,甚至学生之中. 初学者非常容易被各种命令,参数吓哭.但实际上刚上手你并不需要了解所有命令的用途.你可以从掌握一些简 ...

  7. git命令使用方法

    git安装包 http://c35.yunpan.360.cn/my/?sid=#%2F%E5%AE%89%E8%A3%85%E5%8C%85%2FGit%E5%AE%89%E8%A3%85%2F g ...

  8. git命令实战之血泪记录

    注意: 本文章所写所有命令均在Git命令行窗口执行!非cmd窗口! 打开git命令行窗口步骤为:到项目根目录下执行bash命令行操作:右键点击Git Bash Here菜单,打开git命令窗口,不是c ...

  9. 一天工作所用到的Git命令

    一天工作所用到的Git命令 像大多数新手一样,我一开始是在网上搜索 Git 命令,然后把答案复制粘贴,并没有真正理解它们究竟做了什么. 后来我曾经想过:"如果有一个最常见的 Git 命令的列 ...

随机推荐

  1. Spring Boot 2.X(二):集成 MyBatis 数据层开发

    MyBatis 简介 概述 MyBatis 是一款优秀的持久层框架,支持定制化 SQL.存储过程以及高级映射.它采用面向对象编程的方式对数据库进行 CRUD 的操作,使程序中对关系数据库的操作更方便简 ...

  2. day 19作业

    目录 今日作业: 今日作业: 1.什么是对象?什么是类? 答:对象是特征与技能的集合体,类是一系列对象相同的特征与技能的结合体 2.绑定方法的有什么特点 答:由对象来调用称之为对象的绑定方法,不同的对 ...

  3. Cow Acrobats

    Farmer John's N (1 <= N <= 50,000) cows (numbered 1..N) are planning to run away and join the ...

  4. golang初探与命令源码分析

    前段时间有群友在群里问一个go语言的问题: 就是有一个main.go的main函数里调用了另一个demo.go里的hello()函数.其中main.go和hello.go同属于main包.但是在mai ...

  5. Linux 命令之 chmod

    命令格式 chmod有以下三种格式 chmod [-cfvR] MODE[,MODE]... FILE... chmod [-cfvR] OCTAL-MODE FILE... chmod [-cfvR ...

  6. Neo4j:图数据库GraphDB(一)入门和基本查询语句

    图数据库的代表:Neo4j 官网:  http://neo4j.com/ 引言:为什么使用图数据库 在很多新型项目中,应用图数据库已经是势在必行的趋势了,因为图数据库可以很好的表示各种节点与关系的概念 ...

  7. perftools::tcmalloc

    安装libunwind wget http://ftp.yzu.edu.tw/nongnu/libunwind/libunwind-1.1.tar.gz ./configure make make i ...

  8. Vulnhub靶场渗透练习(四) Acid

    利用namp 先进行扫描获取ip nmap  192.168.18.* 获取ip  没发现80端口 主机存活  猜测可以是个2000以后的端口 nmap -p1-65533 192.168.18.14 ...

  9. 用Docker搭建一个支持https的nginx代理服务

    用Docker搭建一个支持https的nginx代理服务 说明:本文所提的服务只是作者平常测试使用,可能含有未知bug或不成熟的解决方案,仅供参考,请不要用于正式环境,当然,使用过程中有任何问题欢迎提 ...

  10. 算法<初级> - 第一章 排序相关问题

    算法 - 第一章 时间复杂度: Big O 时间/空间复杂度计算一样,都是跟输入数据源的大小有关 n->∞ O(logn) 每次只使用数据源的一半,logn同理 最优解 先满足时间复杂度的情况最 ...