Git 是一款开源优秀的版本管理工具,它最初由 Linus Torvalds 等人开发,用于管理 Linux Kernel 的版本研发。相关的书籍和教程网上琳琅满目,它们多数都详细的介绍其基本的使用和命令。本人根据自己的经验,整理出几个较为高级而常用的命令。

推荐资料 Git Book。

Git blame

Git blame 可以查询每一行代码的 commit ID、提交者和提交日期。

  1. $ git blame nova/api/openstack/compute/servers.py
  2.  
  3. 5b866f3a nova/api/openstack/v2/servers.py (Kevin L. Mitchell 2012-01-09 13:13:08 -0600 776) @wsgi.response(202)
  4. 5b866f3a nova/api/openstack/v2/servers.py (Kevin L. Mitchell 2012-01-09 13:13:08 -0600 777) @wsgi.serializers(xml=FullServerTemplate)
  5. 5b866f3a nova/api/openstack/v2/servers.py (Kevin L. Mitchell 2012-01-09 13:13:08 -0600 778) @wsgi.deserializers(xml=CreateDeserializer)
  6. 5b866f3a nova/api/openstack/v2/servers.py (Kevin L. Mitchell 2012-01-09 13:13:08 -0600 779) def create(self, req, body):
  7. cc642ff1 nova/api/openstack/compute/servers.py (Alex Meade 2012-04-15 21:44:15 -0400 780) """Creates a new server for a given user."""
  8. d1ad73ee nova/api/openstack/compute/servers.py (Mark McLoughlin 2012-09-12 12:50:53 +0100 781) if not self.is_valid_body(body, 'server'):
  9. 5b866f3a nova/api/openstack/v2/servers.py (Kevin L. Mitchell 2012-01-09 13:13:08 -0600 782) raise exc.HTTPUnprocessableEntity()

  

  1.  

Git show

确切的说,Git show 并非是一个高级命令,只是它经常配合 git blame,从而查询整个 patch。

  1. $ git show 5b866f3a
  2.  
  3. ...
  4.  
  5. diff --git a/nova/api/openstack/common.py b/nova/api/openstack/common.py
  6. index 5def03f..e96c42a 100644
  7. --- a/nova/api/openstack/common.py
  8. +++ b/nova/api/openstack/common.py
  9. @@ -334,6 +334,21 @@ def get_networks_for_instance(context, instance):
  10. return networks
  11.  
  12. +class MetadataDeserializer(wsgi.MetadataXMLDeserializer):
  13. + def deserialize(self, text):
  14. + dom = minidom.parseString(text)
  15. + metadata_node = self.find_first_child_named(dom, "metadata")
  16. + metadata = self.extract_metadata(metadata_node)
  17.  
  18. ...

  

Git reflog

Git reflog 记录了 git 某个分支的每次操作,通常用来恢复误操作影响的数据。

  1. $ git reflog
  2.  
  3. 1dcfb0f HEAD@{0}: reset: moving to 1dcfb0f
  4. d5640a9 HEAD@{1}: checkout: moving from test to master
  5. 1dcfb0f HEAD@{2}: checkout: moving from icehouse to test
  6.  
  7. $ git reset d5640a9

  

Git cherry-pick

Git cherry-pick 可从其它分支抓取 commit 合入当前分支中,常用于从 upstream 合入 patch。

  1. $ git cherry-pick -x commit_id

  

Git rebase

Git rebase 无疑是最为复杂、最难以理解,当然也是非常强大的命令,常用于合并分支,可以简单的理解为一系列的 git cherry-pick,它具有以下功能。

合并分支
重新修改 Commit,如合并 commit,调整 commit 的顺序。
Git rebase 用法请见 Git Book,但是使用时,请注意以下准则:

The golden rule of git rebase is to never use it on public branches.

来源:koala bear
链接:http://wsfdl.com/devops/2014/11/20/%E5%87%A0%E4%B8%AA%E5%B8%B8%E7%94%A8%E7%9A%84git%E9%AB%98%E7%BA%A7%E5%91%BD%E4%BB%A4.html

更多干货领取可关注公众号后回复“干货”即可免费领取海量干货

几个常用的 Git 高级命令的更多相关文章

  1. Git / 程序员需要知道的12个Git高级命令

    众所周知,Git目前已经是分布式版本控制领域的翘楚,围绕着Git形成了完整的生态圈.学习Git,首先当然是学习Git的基本工作流.相比于SVN等传统版本控制系统来说,Git是专为分布式版本控制而生的强 ...

  2. 你需要知道的12个Git高级命令

    众所周知,Git目前已经是分布式版本控制领域的翘楚,围绕着Git形成了完整的生态圈.学习Git,首先当然是学习Git的基本工作流.相比于SVN等传统版本控制系统来说,Git是专为分布式版本控制而生的强 ...

  3. 你需要知道的12个Git高级命令【转】

    转自:http://www.linuxidc.com/Linux/2016-01/128024.htm 众所周知,Git目前已经是分布式版本控制领域的翘楚,围绕着Git形成了完整的生态圈.学习Git, ...

  4. git 高级命令

    git bisect 运行git bisect 通常是为了找出某个导致版本库产生倒退或bug的特殊提交 例如:你的版本库已经从一个已知的"好"状态过渡到一个已知的"坏&q ...

  5. [翻译] 10 个实用的 Git 高级命令

    1. 输出最后一次提交的改变 这个命令,我经常使用它 来发送其他没有使用 git 的人来检查或者集成所修改的.它会输出最近提交的修改内容到一个 zip 文件中. git archive -o ../u ...

  6. git高级命令

    git reflog 显示所有branch的commit,包括commit和reset,以及已删除的commit.而git log只显示当前branch的commit,不包括已删除的commit gi ...

  7. sed高级命令

    所谓高级,主要是指这里将要提到的命令都能改变sed执行或者控制的流程顺序(sed通常都是一行被读入模式空间,并用脚本中的sed命令一个接一个的应用于那一行). 高级sed命令分成3个组: 1)处理多行 ...

  8. git常用命令/git 部分高级命令备忘录

    常用命令 克隆 - git clone  git@gitee.com:niunafei1/git_learning.git git 创建分支 - git checkout -b dev git 切换分 ...

  9. 几个最常用的git命令

    之前在Windows下一直用可视化的tortoise git,在Linux下最好是用命令行,以下是常用的git命令: git status:显示当前已修改的文件,新增的文件 git checkout  ...

随机推荐

  1. C++程序设计基础(5)sizeof的使用

    1.知识点 (1)sizeof是一个单目运算发,而不是一个函数,其用于获取操作数所占内存空间的字节数. (2)sizeof的操作数可以使类型名,也可以是表达式,如果是类型名则直接获得该类型所占字节数, ...

  2. Visual Studio 安装OpenCV及问题总结

    1.VS安装OpenCV基本步骤 1)安装Visual Studio 下载网址https://opencv.org/releases.html# 2)安装OpenCV 下载网址https://www. ...

  3. sql: 生日赠品中的相关算法

    ---2013年10月9日生日,就以2012年9月1日至2013年8月31日計算 (因為係生日月份前兩個月之最後一天為結算日) DECLARE @birthday datetime,@now date ...

  4. jquery hover(overListener, outListener) || bind('mouseover',methodA).bind('mouseout',methodB)

    1.区别: bind方式,进入外部区域和内部区域都会触发相关方法(methodA 或methodB): hover方式,进入内部区域不会再触发相关方法. 2.example: <body> ...

  5. Cass和ArcGIS交换

    南方cass图形为CAD,把CAD图形转换成arcgis没有任何问题,到属性有问题,cass存放数据是放在CAD扩展XDATA中,和 arcgis导入导出CAD标准扩展属性不一样,只能二次开发使用,c ...

  6. (转)Android新的menu实现——ActionMode

    Android的menu有多种实现方式,以前写过一篇Android中五种常用的menu(菜单),这里介绍一种新的menu实现方式:ActionMode.ActionMode是Android 3.0以后 ...

  7. JDE获取所有字典数据

    select a.*,b.DTDL01 FROM crpctl.f0004 a,crpctl.f0004d b where a.dtsy =b.dtsy(+) and a.dtrt =b.dtrt(+ ...

  8. css 字体样式设置

    css字体样式(Font Style),属性 时间:2014-05-08 21:49 来源:我爱学习网 | 作者:我爱学习网 | 本文已影响 68353 人   css字体样式(Font Style) ...

  9. Mirco F-measure and Macro F-measure

  10. 检查你要加入到gradle的第三方library是否是最新版本

    开发者从博客.github readme  或者 官方文档中找到如何在gradle 文件中加入dependency  的时候,往往版本已经比较老旧了,想要找到最新版,介绍一个利器 http://gra ...