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

推荐资料 Git Book。

Git blame

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

$ git blame nova/api/openstack/compute/servers.py

5b866f3a nova/api/openstack/v2/servers.py               (Kevin L. Mitchell        2012-01-09 13:13:08 -0600  776)     @wsgi.response(202)
5b866f3a nova/api/openstack/v2/servers.py (Kevin L. Mitchell 2012-01-09 13:13:08 -0600 777) @wsgi.serializers(xml=FullServerTemplate)
5b866f3a nova/api/openstack/v2/servers.py (Kevin L. Mitchell 2012-01-09 13:13:08 -0600 778) @wsgi.deserializers(xml=CreateDeserializer)
5b866f3a nova/api/openstack/v2/servers.py (Kevin L. Mitchell 2012-01-09 13:13:08 -0600 779) def create(self, req, body):
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."""
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'):
5b866f3a nova/api/openstack/v2/servers.py (Kevin L. Mitchell 2012-01-09 13:13:08 -0600 782) raise exc.HTTPUnprocessableEntity()

  

 

Git show

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

$ git show 5b866f3a

...

diff --git a/nova/api/openstack/common.py b/nova/api/openstack/common.py
index 5def03f..e96c42a 100644
--- a/nova/api/openstack/common.py
+++ b/nova/api/openstack/common.py
@@ -334,6 +334,21 @@ def get_networks_for_instance(context, instance):
return networks +class MetadataDeserializer(wsgi.MetadataXMLDeserializer):
+ def deserialize(self, text):
+ dom = minidom.parseString(text)
+ metadata_node = self.find_first_child_named(dom, "metadata")
+ metadata = self.extract_metadata(metadata_node) ...

  

Git reflog

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

$ git reflog

1dcfb0f HEAD@{0}: reset: moving to 1dcfb0f
d5640a9 HEAD@{1}: checkout: moving from test to master
1dcfb0f HEAD@{2}: checkout: moving from icehouse to test $ git reset d5640a9

  

Git cherry-pick

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

$ 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

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

最新文章

  1. PHP 函数(数组字符串)
  2. 【原创】--linux平台下opencv安装
  3. postgresql 函数demo
  4. object_c函数多个返回值
  5. JavaScript 性能优化 --By Google V8 Team Manager
  6. ubuntu 映射网络驱动器到本地
  7. 炮兵阵地(POJ 1185状压dp)
  8. dataStructure@ Check if a directed graph has cycles
  9. CSDN博客排名第一名,何许人也
  10. 提升 Hive Query 执行效率 - Hive LLAP
  11. dubbo 调用服务超时
  12. node os模块
  13. Yii1版本下控制台应用的使用
  14. LeetCode 575 Distribute Candies 解题报告
  15. 在Windows系统下搭建ELK日志分析平台
  16. Linux下使用Supervisor来管理维护程序-详解
  17. C# Winform程序以及窗体运行的唯一性汇总
  18. 7. Debug on local machine
  19. obj-c的优缺点
  20. 牛客网国庆集训派对Day5 题目 2018年

热门文章

  1. 从零开始写C# MVC框架之--- 项目结构
  2. SpringSecurity 3.2入门(7)自定义权限控制介绍
  3. mybatis简单示例
  4. 实用的随机数生成类Random:测试(随机产生100个不重复的正整数)
  5. Mysql性能调优方法
  6. Celery-------项目目录
  7. 04_Redis数据类型(set、zset)
  8. 标头停止点不能位于宏或#if块中.
  9. AS打包出现app:transformClassesAndResourcesWithProguardForRelease错误
  10. Strom入门