一、基础命令

快照类操作:add、status、diff、commit、reset、rm、mv

分支类基本操作:branch、checkout、log、stash

分享及更新项目基本操作:pull、push

组合场景操作:

获取代码:创建仓库(UI)、clone

提交代码:add、status、diff、commit、reset

分享代码:branch、push

更新代码:stash、rebase、pull

阅读代码:checkout、log

贡献代码:fork、merge request

二、以下为具体操作与截图

1、获取代码

在git bash命令下执行git clone <git下载地址>,例如:git clone git@git.scm.test.com:zhanyuyi/git_basic_homework.git

2、 建立.gitgnore

(1)第一次提交代码前,建立.gitignore,在git bash命令下执行touch .gitignore即可生成

(2)建立.gitignore后,提交

//添加.gitignore文件到暂存区

git add .gitgnore

//提交

git commit -m "chore:添加.gitgnore,忽略不需要版本跟踪的文件"

(3)用文本编辑器如editplus或notepad++输入需要忽略的文件或文件名,一般可忽略的文件有以下:

##ignore this file##
/target/

.classpath
.project
.settings      
 ##filter databfile、sln file##
*.mdb  
*.ldb  
*.sln    
##class file##
*.com  
*.class  
*.dll  
*.exe  
*.o  
*.so  
# compression file
*.7z  
*.dmg  
*.gz  
*.iso  
*.jar  
*.rar  
*.tar  
*.zip  
*.via
*.tmp
*.err 
# OS generated files #  
.DS_Store  
.DS_Store?  
._*  
.Spotlight-V100  
.Trashes  
Icon?  
ehthumbs.db  
Thumbs.db

备注:

/target/ :过滤文件设置,表示过滤这个文件夹

*.mdb  ,*.ldb  ,*.sln 表示过滤某种类型的文件
/mtk/do.c ,/mtk/if.h  表示指定过滤某个文件下具体文件
 !*.c , !/dir/subdir/     !开头表示不过滤
 *.[oa]    支持通配符:过滤repo中所有以.o或者.a为扩展名的文件

该方法保证任何人都提交不了这类文件

3、提交代码

本地working directory、staging area暂存区、local repo三个区域间切换关系

提交代码前需要做好2点,第一,一次提交只做一件事;第二,review后才提交。

通常为以下步骤:

  1. //步骤1:查看本地仓库状态
  2.  
  3. git status
  4.  
  5. //步骤2:添加认为本次提交应包含的文件到暂存区
  6.  
  7. git add file1
  8.  
  9. ...
  10.  
  11. //步骤3:review暂存区内容
  12.  
  13. git diff --cached
  14.  
  15. //若review发现问题,则继续修改,然后再add,直到满意
  16.  
  17. ...
  18.  
  19. //步骤4:提交到本地仓库
  20.  
  21. git commit -m "feat:新增a.java"
  22.  
  23. //步骤5:提交到远程仓库
  24.  
  25. git push

有提交必然有提交日志,提交日志格式:

  1. <type>(<scope>):<subject>
  2.  
  3. //空一行
  4.  
  5. <body>

提交日志规范如下:

  1. type
  2. 用于表示commit的类别,允许用下面8个标识
  3. ftr/(feat):新功能(feature)无ftr历史原因的,请使用feat
  4. fix:修补bug
  5. docs:文档(documentation)
  6. style:格式(不影响代码运行的变动)
  7. refactor:重构(即不是新增功能,也不是修改bug的代码变动)
  8. test:增加测试
  9. chore:构建过程或辅助工具的变动
  10. conflict:解决冲突
  11.  
  12. scope
    用来标识当前提交代码的影响范围
  13. 如果jira单对应,用(#jira-)的格式来标准(如果jira单对应featfix,强制性添加)
  14. 如果没jira单对应,则按层级描述代码的影响范围(eg:view,viewmodel,net,test,model,utils,protocol,presenter)
  15. 如果在代码评审工具Phabricator评审代码,在scope中加上fixhash id
  16. 如果没合适的范围,可以不填
  17.  
  18. subject
    commit目的的简短描述,不超过50个字符。
    以动词开头
    结尾不加句号(。)或句点(.)
  19.  
  20. body
    是对本次commit的详细描述,可以分成多行

提交范例:

  1. jira单例子
  1. ftr(#JIRA-):完成计算器加减开发
  2.  
  3. 计算器加减法功能完成
  4. -添加加减法计算UI
  5. -添加错误提示样式
  1. jira单例子
  1. refactor(viewmodel):重构add viewmodel部分代码,提高性能
  2.  
  3. add计算逻辑优化
  4. -整型改为浮点型计算

4、合并代码

合并他人分支时,例如需要把task_TEST-1_zhanyuyi合并到master分支

第一,若不在master分支,使用git checkout master把当前分支切换到master分支;

第二,使用git merge task_TEST-1_zhanyuyi后,确定merge成功;

第三,使用git push,把当前的master分支推送到远程master分支;

5、分享代码(创建分支、推送到远程分支)

第一,创建专属分支git branch <分支名>,分支命名规则:<任务类型>_<任务序号>_<姓名拼音缩写>,例如:task_JIRA-1_zhanyuyi

第二,第一次push到远程分支(在远程仓库创建分支并绑定到本地同名分支),git push -u origin <分支名称>

第三,非首次push到远程分支,git push

以下为本地常用分支操作

  1. //查看分支
  2. git branch
  3.  
  4. //创建分支
  5. git branch <分支名>
  6.  
  7. //切换分支
  8. git checkout <分支名>
  9.  
  10. //创建+切换分支
  11. git checkout -b <新分支名字>
  12.  
  13. //删除分支
  14. git branch -d <需删除的分支名>

 6、更新代码

当你正在专属分支开发时时,临时需要改BUG或切换分支,可用下面的步骤

  1. //存储所有目前带有版本跟踪的文件,并把文件恢复回和最新提交一致的内容
  2. git stash
  3.  
  4. //去做所有想做的事情,例如改BUG,切分支
  5.  
  6. //搞定想做的事情后,准备继续前面的工作,切回原分支
  7. git checkout <原工作分支名字>
  8.  
  9. //把第一步存储的文件全部恢复回来
  10. git stash pop

然而无专属分支时,确实需push

  1. //存储所有目前带有版本跟踪的文件,并把文件恢复回和最新提交一致的内容
  2. git stash
  3.  
  4. //获取远程仓库最新代码,并应用到本地
  5. git pull
  6.  
  7. //推送远程仓库
  8. git push
  9.  
  10. //把第一步存储的文件全部恢复回来
  11. git stash pop

在上面步骤看到git pul可以获取远程仓库最新代码并应用到本地,其实git pull效果等价于git fetch+git mergre<本地当前分支名>

副作用:若pull时,本地有代码没push,会产生一次merge提交。不推荐在没有进行stash的前提下pull,容易冲突。

副作用解决方法:为了同步公共分支最新内容,用git fetch+git rebase origin/<本地当前分支名称>代替git pull

  1. 例:
  2. git fetch origin
  3.  
  4. git rebase origin/<本地当前分支名>

7、阅读代码

当你正在一个分支,突然想看看别人分支的代码,可以用以下方法

  1. //先把正在编辑的分支保存起来
  2. git stash
  3.  
  4. //查看当前分支提交日志
  5. git log
  6.  
  7. //查看日志,一行一行阅读日志
  8. git log --online
  9.  
  10. //切换到指定提交后的状态
  11. git checkout <单次提交的sha->
  12.  
  13. //做你想做的事情
  14. 。。。
  15. //最后,记得把第一步存储的文件全部恢复回来
  1. git stash pop

看到这里,<单次提交的sha-1>相信大家疑问在哪里取,其实,在查看日志每个提交开头,7位,类似b76a6c5,如果切换到前一个提交后,一切正常还想看看前前一个提交如何,就用下面的方式

  1. //查看上一个提交改了什么
  2. git log -p <提交的sha->

8、贡献代码

在网页fork,然后merge request

三、GIT网页操作

1、版本对比

【compare】后,展开两个版本修改内容,绿色代表新增,红色代表删除。展开某个类后,选择右侧的【Side-by-side】做左右对比

2、用到继续写

四、git技术栈脑图

(从简书上搜索的https://www.jianshu.com/p/e73b2bf0f62f

git个人使用总结(命令版)的更多相关文章

  1. Git笔记:Git介绍和常用命令汇总

    Git 是一个开源的分布式版本控制系统,与 CVS, Subversion 等不同,它采用了分布式版本库的方式,不需要服务器端软件支持. 工作流程 Git 的工作流程大致如下: 克隆 Git 资源作为 ...

  2. Git的一些常用命令

    一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 简单的说就是托管代码的便于多人开发的管理系统. 二.Git的一些命令,我详细的说一下 我是基于github给大家说一下git的一些常 ...

  3. Git上传代码命令

    对于Git在这不做说明:只介绍Git使用过程中的常用命令: 一.创建仓库,提交文件 1.初始化一个Git仓库,使用git init命令. 2.添加文件到Git仓库,分两步: 第一步,使用命令git a ...

  4. git plumbing 更加底层命令解析-深入理解GIT

    原文: http://rypress.com/tutorials/git/plumbing 本文详细介绍GIT Plumbing--更加底层的git命令,你将会对git在内部是如何管理和呈现一个项目r ...

  5. Git中的merge命令实现中出现问题及其解决

    Git中的merge命令实现和工作方式 2015年8月17日星期一 丹丹 git代码在合并两个分支的时候总是会出现一下的错误提示,不能正常的完成合并分支,错误提示如图所示: 但是在其他的终端是可以完成 ...

  6. github总结(4)--关于git reset --hard这个命令的惨痛教训

    背景叙述: 前几天,上传自己的个站到git上的时候,手欠脑发晕的用了次git reset --hard xxxxxx 命令.由于只在线上传入了一个index.html页面(自己都不知道自己咋想的,就这 ...

  7. GIT学习笔记——常用命令

    最近使用使用GIT较多,但命令很容易就忘记了,于是整理下,大多整理与一些文档和他人博客 在当前目录新建建一个纯git代码库 $ git --bare init 在当前目录新建一个Git代码库 $ gi ...

  8. Git安装以及常用命令(图文详解)

    **Git安装以及常用命令** 1.下载安装Git,傻瓜式安装相信大家都会. 官网下载地址:[https://git-scm.com/downloads] 2.Git基本操作 (1)git --ver ...

  9. 【转】Git 代码行统计命令集

    查看git上个人代码量 git log --author="username" --pretty=tformat: --numstat | awk '{ add += $1; su ...

随机推荐

  1. 【dlib代码解读】人脸检测器的训练【转】

    转自:http://blog.csdn.net/elaine_bao/article/details/53046542 版权声明:本文为博主原创文章,转载请注明.   目录(?)[-] 综述 代码解读 ...

  2. Java工厂模式浅析理解

    由于本人缺乏工作经验,本篇文章作为随笔,只是对工厂模式有一个简单的认识 工厂模式分为以下三种: 1:简单工厂(Simple Factory).2:工厂方法(Factory Method).3:抽象工厂 ...

  3. sql多对多探讨

    --用sql语句探讨一对多 多对多关系 /**** 你有3个表  学生表(学生id 学生姓名) 课程表(课程id 课程名) 成绩表 (学生id 课程id 分数) 班级表(班级id 学生id) 这里的班 ...

  4. MVC中@Html.Action的用法(类似自定义控件)

    MVC项目中如果有公共部分的代码就可以单独拿出来作为控件来用(比如头部和底部代码).跟ASP.NET中的ASCX实现的效果一样,但MVC比它方便的多. 一.@Html.Action的用法 @Html. ...

  5. SQL Server 预编译执行SQLs

    问题描述: MVC5项目,利用执行sql的方式获取数据,但是在利用预编译执行的时候报错了,字段XXXwhich was not supplied. 其实就是这个参数传了个null导致的.在传参数之前做 ...

  6. How to not display “Commit point reached - logical record count” counts

      You can use the keyword silent, which is available in the options clause. You can set the followin ...

  7. 教程:基于Spring快速开发电子邮件发送功能

    在Spring框架的spring-context-support.jar中有对电子邮件发送功能的封装: 基于Spring开发简单省事,而且更稳定.需要mail.jar包支持 @Component pu ...

  8. 开始使用 Docker (Linux 上运行 SQL Server) 上的 SQL Server 容器 - SQL Server | Microsoft Docs

    原文:开始使用 Docker (Linux 上运行 SQL Server) 上的 SQL Server 容器 - SQL Server | Microsoft Docs 快速入门:使用 Docker ...

  9. java 中的VO,PO,DTO,DO对象

    经常会接触到VO,DO,DTO的概念,本文从领域建模中的实体划分和项目中的实际应用情况两个角度,对这几个概念进行简析. 得出的主要结论是:在项目应用中,VO对应于页面上需要显示的数据(表单),DO对应 ...

  10. kubernetes社区项目生态概览

    原文  http://dockone.io/article/2075 作为容器集群管理技术的最流行的技术,kubernetes,自从2014在github上开源后,已经通过多个项目形成了一个生态,以下 ...