在使用git之前,一直用的是svn版本管理;与svn最大不同的是,git有两个仓库,一个是本地仓库,一个是服务器上共享的仓库;本地仓库是每个开发者自己独有的,即使commit提交也只是提交到本地仓库;这只是git流行起来的一个优势之一,另外linux作者开发的这套版本管理工具,很接地气,也是流行起来的一大亮点。扯了这么多没用的,言归正卷,那么在日常开发工作中,哪些git命令是我们常用到的呢?下面就说说几个常用命令的常用场景,至于这些命令详细使用就不在本文讨论之内。

1、git命令别名

  使用过git的都知道,git的有些命令名有些长,每次在使用改命令时都要输入这些,尤其是一些命令语句;怒长的一串文字字符串打起来很费劲,开发者也很不爽;这时我们的git alias功能可以费墨登场了。下面是本人的一些常用命令的alias配置:

命令 别名
commit   ci
checkout co
status st
merge origin/master mom

  

注意:以上git命令别名的设置是在计算机用户目录下.gitconfig文件全局设置的,这样所有git分支都能运用设置的别名。当然,根据不同开发者的个人喜好,可以有自己的别名设置;

2、git checkout

  这个命令用于检出某个分支、提交或者对应的某个分支、提交的文件。根据不同的参数来检出不同的内容;那么其常用场景如下:

  • git checkout .  用暂存区的内容覆盖当前工作区内容,那么可以达到用暂存区的内容来撤销本地分支的修改
    某些情况下,想在当前分支中做一下测试,这时修改了当前分支的多个文件,测试过后要撤销对当前分支的变更,这时可以使用git checkout . 命令;
    注意:使用该命令需要注意一点:本地分支所有文件的变更都会被撤销
  • git checkout -b newBranchName  origin/master 基于master创建一个新分支,并切换到新分支上
    避免了git branch完成此功能需要多执行一步:
    git branch newBranchName  origin/master
    git checkout newBranchName
  • git checkout - 切换到 切换到当前分支之前的分支
    使用场景:开发本地创建多个分支来完成不同的需求,这时可能需要来回切换不同的分支,如在A分支开发时,提测的B分支有bug,qa要让fixed,这时就切换到B分支屁颠屁颠的修bug,完事之后要切换到A分支,此时可以使用快捷命令
  • git checkout  commitId/branchName  -- path  用指定的提交id或者分支的某个文件来替换本地与其对应的文件,达到该文件的内容变更的撤销
    使用场景:由于某种原因,在众多的文件变更中,只撤销某个指定文件的内容变更

3、git stash

 该命令用于暂存本地文件的修改。

 某天,开发者在一个分支上开发某个需求,突然这种自我happy的开发方式被打断,某个提测的分支有bug需要马上修复;擦,本地的代码还没有提交呢,但是又不想因临时的提交本地代码导致如何描述临时提交的描述。于是乎就可以使用git stash来存取本地变更的代码;然后切换有bug的分支解决问题,最后回到本分支使用git stash pop即可复现之前没有提交的本地变更代码;该命令是不是用起来很爽。

但是,使用该命令需要注意以下两点:

  • git stash只是保存已经git add过的文件变更,只要暂存过的文件都会被保存;那么本地新增的文件,必须使用git add命令之后才会被保存,否则提示你需要将新增文件要暂存;
  • 暂存的分支需要使用git stash pop恢复;但是若多次git stash,需要准确记住某个分支的对应的保存位置,否则容易搞错;可以使用 git stash list来查看;

4、git revert

用于撤销某次提交的变更内容。这个revert与webstrom等IDE中提供的revert掉git的某些文件不同,后者其实最终还是利用git checkout来实现的。

该命令的最大场景是:代码发布上线后,由于某种原因需要代码回滚,这时基于当前分支发布的分支在线上代码回滚后merge master时,本地新开发的需求代码丢失了,因为回滚到上线之前的代码,这个时候还不存在回滚掉的代码;怎么恢复merge掉的代码呢,这时就需要git revert了,具体步骤如下:

  • 通过git reflog查看回滚生成的commit,如下图本地曾经回滚过的日志,e103c47是回滚时新生成的提交点
  • 使用命令 git revert e103c47即可恢复merge掉的代码

5、git reset

该命令用于重置指定区域的内容,可以操作提交,也可以操作文件;该命令的三个参数--hard、--mixed、--soft表示重置的范围,这个命令也是最常用的命令之一;

使用该命令得记住一点,它会对git的提交历史做修改,可能会删掉一些历史提交点导致不能恢复

  • git reset [--mixed] commitId 用commitId的内容重置暂存区的内容,工作区内容不会被覆盖,这样可达到撤销暂存区的变更

    场景:某次变更的代码一不留意用git add添加到暂存区,但是想要撤销暂存区的内容而不会导致本地工作区代码丢失,这时可以使用git reset HEAD

  • git reset --hard commitId 用commitId的内容重置暂存区和工作区的内容

    场景:在某次升级某个稳定性不确定但是功能全面的框架,使用包管理机制下载最新的框架源码,开发一段时间后发现有很大问题,但是这时代码已经git add到暂存区,想要撤销掉工作区和暂存区的内容变更时,就可以使用git reset --hard HEAD
  • git reset commitId -- path 用指定commitId的文件内容替换掉暂存区对应文件,工作区的不便
    注意:该操作不会修改git的提交历史

6、git branch

用于创建、显示分支等与分支相关的命令,工作中常用到的情况:

  • git branch branchName origin/master 基于master创建一个分支

    这种情况创建的分支要进行完整的开发,过程有些繁琐,需要:

    git checkout branchName   //切换到新建的分支上
    git push //将当前分支推送服务器
    git branch -u origin HEAD //建立当前分支与服务器同名分支的上传流

    但是在实际中,个人比较倾向于下面一种,只需两步即可:

    git checkout -b branchName origin/master
    git push -u origin HEAD
  • git branch -vv 查看本地分支的upstream的对应情况,一定要确保本地分支与服务器上分支的对应情况,因为不单独设立对应情况,新建分支默认与master是对应关系
  • git branch -remote 查看的是本地仓库的所有分支
  • git branch -D branchname 删除本地分支
    注意:需要切换到其他分支进行其操作,不能在当前分支删除当前分支,这是不允许的

7、git push

用于与服务器仓库同步代码,该命令的用法不做赘述,该命令的一个常用情况就是删除服务器端某个指定的分支,命令如下:

git push origin 空格:remote_branch_name

8、git rm

该命令用于删除分支中的文件,他可以只删除暂存区的文件,也可以同时删除暂存区和工作区的文件,参数不同,决定删除的文件范围也不同,具体如下:

git rm --cached  filename   //删除暂存区的某个文件,工作区的不会删除
git rm filename //同时删除暂存区和工作区的该文件

git rm filename的场景:为满足某次需求,新增了一些代码文件,在开发中可能不小心将某个无用的新文件加到工作区而被git add到暂存区,这时需要同时删掉暂存区和工作区的该文件;

9、git commit

用于提交暂存区代码到本地仓库;说一下git commit --amend选项

git commit --amend 的使用场景:某次需求开发提交中,由于某种原因导致提交的结果不是期望的,需要重新提交,但是又不希望前一次的提交使git提交历史树变长,那么可以使用git commit --amend来用暂存区的内容修正前一次的提交。 如果不使用带--amend的提交,结果是git提交历史树会变长。git commit --amend的原理图如下:

10、git blame

在多人协作开发的项目中,想要知道某个文件的历史改动情况,可以使用该命令来完成,具体如下:

git blame -L line1, line2 file

 上面是查看file文件的第line1行到line2行代码的改动情况,如下图是查看本地某个文件的192到193行的改动情况,看出是adam23有最新改动

上面介绍的都是自己用的比较频繁的git命令和对应的场景,当然有些情况不一定值得借鉴,或者还有不妥的地方,这些都希望大家批评指正!!

11、.gitignore诠释

使用.gitignore时,可能会发生这样一种情况:明明在.gitignore中设置了忽略某个文件,可以用git  status查看时还是会追踪其变化*;遇到这种情况,如果想当然的认为配置到`.gitignore`中的文件不会被追踪,那么可能是你对.gitignore的有误解。

那么.gitignore的具体理解是什么样呢,具体有两个方面需要注意:

  • .gitignore只会忽略从未在git仓库中维护的文件,即*自文件添加以后,从未 add 及 commit 过的文件*;这时`.gitignore`中配置的文件是有效的,即git不会追踪其变化。
  • 已经在git仓库维护过的文件,即使在`.gitignore`中配置不要追踪其变化,一旦文件变化git还是会追踪的。
    通俗的说,就是`已经维护起来的文件,即使加上了gitignore,也无济于事`

了解上面的情况,才算是对.gitignore真正的理解。那么问题来了:**如何忽略对git仓库中已维护文件的变化的追踪呢?**

答案是使用:git update-index --assume-unchanged path。例如git仓库中已维护logs目录,想忽略该目录下的所有.js文件的变化,可以这样:

git update-index --assume-unchanged logs/*.js

具体可以参考这里

git常用命令常用场景的更多相关文章

  1. Git常用命令及场景

    Git命令推送到远程分支 1.登录GitHub创建一个远程仓库. https://github.com 2.git init 本地创建一个目录,并初始化一个git仓库. 3.git add 添加文件到 ...

  2. 常用命令常用sql:SHOWVARIABLESLIKE'character%'

    mysql学习笔记-常用命令 常用sql: SHOW VARIABLES LIKE 'character%';查看字符集SHOW VARIABLES LIKE 'collation_%';show e ...

  3. 附1 consul常用命令+常用选项

    之后每用到一个command或options,都会记录在这里. 常用命令command: agent 作用:运行一个consul agent join 作用:将agent加入到consul clust ...

  4. git常用命令和场景

    总结: git init //初始化本地git环境 git clone XXX//克隆一份代码到本地仓库 git pull //把远程库的代码更新到工作台 git pull --rebase orig ...

  5. git log命令常用参数集合

    git log 查看 提交历史 默认不用任何参数的话,git log 会按提交时间列出所有的更新,最近的更新排在最上面. 常用的格式占位符写法及其代表的意义.选项 说明%H 提交对象(commit)的 ...

  6. 网络方面的常用命令 & 常用端口介绍

    在网络方面我们常常会用到如下命令: (1)ping命令:我们常常用来判断2台或2台以上的机器间是否网络连通. ping 192.168.1.88 -t 如果想看任何命令的参数是什么意思,我们只需要:命 ...

  7. mysql 常用命令 常用SQL语句

    维护命令 数据库 ##创建数据库 mysql> create database test; Query OK, 1 row affected ##删除数据库 mysql> drop dat ...

  8. 版本控制-Git服务器搭建和常用命令使用

    Git是目前世界上最先进的分布式版本控制系统(没有之一).使用Svn的请参考<版本控制-svn服务器搭建和常用命令(centos 6.3)>,下面介绍Git的常用命令 常用命令 简单版 升 ...

  9. Redis系列(二):Redis的5种数据结构及其常用命令

    上一篇博客,我们讲解了什么是Redis以及在Windows和Linux环境下安装Redis的方法, 没看过的同学可以点击以下链接查看: Redis系列(一):Redis简介及环境安装. 本篇博客我们来 ...

随机推荐

  1. 重新设置Linux的IP地址(该操作会永久更改ip地址)

    1.查看你当前的IP地址 2.进入配置文件进行更改IP地址 3.上图我使用的是ifcfg-eth1 ,然后进行更改这个文件 4.点击“insert”进行编辑改文档,吧对应的IP改成你想要的地址 更改完 ...

  2. random库的常见用法

    import random print( random.randint(1,10) ) # 产生 1 到 10 的一个整数型随机数 print( random.random() ) # 产生 0 到 ...

  3. GOAP

    市面上Unity人工智能的书籍基本上都是介绍这几个方面: AI角色的自主移动 --- 操控行为, 单体,小队,群体的行为. 我之前的文章 Unity Movement AI (一) , Unity M ...

  4. Win8.1无法安装更新,提示0x800*****错误的解决方法

    Win8.1无法安装更新,提示0x800*****错误的解决方法   注:本教程同样适用于Win10系统 有时候Win8.1某个系统文件的损坏会导致无法安装Windows更新,表现为Windows更新 ...

  5. shell入门练习

    **定义局部变量, 局部变量在退出Shell客户端时会失效** **单引号:原样输出** **双引号:如果里面有变量,会输出变量** **没有引号:输出变量** 可以在调用脚本的时候给脚本传递参数,脚 ...

  6. JavaScript函数和内置对象

    一.函数 function f1(){ console.log("666"); } f1(); //调用函数 1.普通函数定义 function f1(a,b){ console. ...

  7. 2018.11.07 NOIP模拟 数独(模拟)

    传送门 sbsbsb签到题. 读题时间比写题时间长系列. 写一个checkcheckcheck函数来检验当前时间段第(i,j)(i,j)(i,j)号格子能否放入kkk就行了. 代码

  8. 4. Father's Impact on a Child's Language Development 父亲对孩子语言发展的影响

    4. Father's Impact on a Child's Language Development 父亲对孩子语言发展的影响 (1)Im families with two working pa ...

  9. CHAPITRE III

    Il me fallut longtemps pour comprendre d'où il venait. Le petit prince, qui me posait beaucoup de qu ...

  10. git只合并某一个分支的某个commit

    第一种情况:只合并一个commit git checkout develop-hbb git cherry-pick 7c32be61 以上,7c32be61是develop上的一个fix bug的c ...