使用git做开发的版本管理也有一年半之多了,但是始终都是常用的branch commit status diff push等一些再常用不过的命令,最近闲下来,打算学习一下高端用法,所以就静下心来好好读了一下蒋鑫老师的《Git权威指南》,果然受益匪浅,加上之前搭建过gerrit审核服务器,做过gitiles搭建等,感觉目前来说对于git能算是一个小小的里程碑了,记录一下觉得很有用的命令。

常用篇:

git commit -s 
提交信息中会存有Signed-off-by: <user.name> <user.email>信息
 
git commit -am
添加当前本地修改并写commit信息
如 git commit -am 'test'
 
git log --graph --oneline
简介显示git log,一行,树状图形。
 
git log -p
显示每个commit的diff信息
 
git log --stat [-num]
显示每个commit所修改的文件信息,显示最近num次
 
git tag <tag name>
在当前位置创建tag,加-m参数后可跟描述
 
git tag -d <tag name>
删除某tag
 
git tag -ln
显示当前的tag及描述列表
 
git push <remote> <tag>
推送本地tag至远端remote
 
git push <remote> :<tag>
删除远端tag
 
git diff --word-diff
逐词比较
 
git clone [--bare] [--mirror] repository directory[.git]
不带参数的时候就是将repository 克隆到本地成为工作区,版本库在.git目录下
--bare 是克隆到本地成为git裸版本库,可以对其进行推送(git push)
--mirror 是克隆到本地成为git版本库,对上游版本库进行了注册,所以在此版本库中可以执行git fetch操作进行持续更新

进阶篇:

git stash [sava <message>]
将工作区修改暂存
 
git stash list
查看保存的进度
 
git stash pop <stash>
将git stash暂存的修改弹出
stash为git stash list的标号
 
git stash clear
删除所有存储的进度
 
git stash drop <stash>
删除一个保存的进度,默认是最新的那个
 
git rev-parse --show-toplevel
显示当前git仓储的绝对路径
 
git format-patch [-s] <since> <till>
将从since到till的commit转换成patch,-s代表需要签名。
 
cat *.patch | git am
应用git format-patch生成的patch

BUG篇:

git blame [-L <num>] <file>
文件追溯,如果某个文件(哪行)导致了一个bug,可以通过这个命令快速查看这里是谁提交的,例:
git blame -L 6, +10 main.c 看main.c从第六行起后边10行的commit信息。
 
二分查找
git bisect start [BAD] [GOOD]
开始记录二分查找
 
git bisect good/bad
把某个commit标记为好/坏的版本
 
如果有标记错的情况:
git bisect log > logfile
git bisect reset
编辑logfile将错误的那条删除或#注释,然后
git bisect replay logfile
 
git bisect run [cmd]
bisect支持自动搜索,cmd可以是shell命令,shell脚本,其他脚本等等。如:
git bisect run make
git bisect run ~/test_case.sh
git bisect run sh -c 'make'
返回0代表good
返回125代表跳过
返回1~127(除125)代表bad

反悔篇:

git reflog show dev
查看本地分支dev的提交记录,可用于恢复reset的内容
e875f66 dev@{0}: merge e875f66afec3177c69f420e5c23d78887676ae4a: Fast-forward
2923439 dev@{1}: merge 29234390a3b0a65be9c9e751914ecc0d0a175ba3: Fast-forward
bc51812 dev@{2}: merge bc51812ad4faf78421cb4ccff4b8bb9d1badab13: Fast-forward
 
git reset --hard dev@{2}
恢复到dev@{2}处,相当于反操作0 1的动作。
 
git commit --amend [-m <commit message>]
修改已经commit过的commit信息
 
git checkout [commit/branch/tag...] --path
将本地path文件回复至某个点时的状态,如 git checkout HEAD^ --README
 
git reset --soft HEAD^^
多步悔棋,恢复到最近两次提交之前,然后git commit。实现多次悔棋。
 
git commit -C [commit/branch/tag...]
提交的时候 commit信息用某个点的
 
git checkout master
git reset --hard HEAD@{1}
将master分支重置与最新的提交上

变基篇:

git rebase
个人认为最难理解的一个命令,一度想要放弃理解,终于在实践后得到部分理解。故记录。
 
git rebase --onto <base> <since> <till>
首先会切换至base,相当于 git checkout base
然后cherry-pick since以上(不包括since)直到till(包括till)之间的所有commit
 
在原git树上的自上到下的结构应该是 till > since > base
执行命令后其实就相当于丢弃了base(不包含)到since(包含)之间的其他commit
 
如果till就是HEAD,则可省略HEAD,即: git rebase --onto base since
PS:since till也可以是别的线上的提交
 
git rebase -i <commit/tag/...>
交互式编辑,采用修改文件的方式自动变基。后接参数为“基”,修改配置文件的时候需要注意:
从上到下的顺序为最老提交到最新提交,与gitk qgit等顺序相反。
删除/跳过:删除那一行的commit信息
合并: 将自动的pick改为squash,则将与上一个老commit合并

Git命令非主流札记的更多相关文章

  1. Git初探--笔记整理和Git命令详解

    几个重要的概念 首先先明确几个概念: WorkPlace : 工作区 Index: 暂存区 Repository: 本地仓库/版本库 Remote: 远程仓库 当在Remote(如Github)上面c ...

  2. 工作中常用的git命令

    一 常用Git命令 git clone:(区分SSH or HTTP) git init:初始化仓库 二 Git命令详解 Git Bash下,cd /c git clone,从远程Git版本库克隆一份 ...

  3. 常用 Git 命令清单

    我每天使用 Git ,但是很多命令记不住. 一般来说,日常使用只要记住下图6个命令,就可以了.但是熟练使用,恐怕要记住60-100个命令. 下面是我整理的常用 Git 命令清单.几个专用名词的译名如下 ...

  4. 常look的Git命令

    常用的Git命令   命令  简要说明 git add 添加至暂存区 git add–interactive 交互式添加 git apply   应用补丁 git am  应用邮件格式补丁 git a ...

  5. ***Linux下使用git命令及github项目

    在linux下搭建git环境1.创建Github账号,https://github.com2.Linux创建SSH密钥: ssh-keygen  ##一直默认就可以了 3.将公钥加入到Github账户 ...

  6. 我所记录的git命令(非常实用)

    一.前言 记录一下工作中常用到的git命令,只是简单的笔记,欢迎大家交流... [ 顺便问下园友们,怎么感觉博客园发布的博客搜索有时都搜不到,后台编辑能填的都填写了,还是觉得搜索排名不高? 相同的标题 ...

  7. GIT命令行的使用

    新手了解 有不对的地方指点下 首先, 了解下什么是GIT,GIT是一款开元的分布式版本控制工具, 在世界上的所有分布式版本控制工具中,GIT是最简单,最流行,同时也是最常用的 相比于其他版本的控制工具 ...

  8. 简明 Git 命令速查表(中文版)

    原文引用地址:https://github.com/flyhigher139/Git-Cheat-Sheet/blob/master/Git%20Cheat%20Sheet-Zh.md在Github上 ...

  9. 常用 Git 命令清单 转

    我每天使用 Git ,但是很多命令记不住. 一般来说,日常使用只要记住下图6个命令,就可以了.但是熟练使用,恐怕要记住60-100个命令. 下面是我整理的常用 Git 命令清单.几个专用名词的译名如下 ...

随机推荐

  1. java集群

    java集群 分类: java学习2011-05-12 09:12 7531人阅读 评论(9) 收藏 举报 java服务器负载均衡ejb集群数据库 序言 越来越多的关键应用运行在J2EE(Java 2 ...

  2. 如何查看.Net源代码vs版本号以及C#项目中各文件的含义

    查看.Net源代码vs版本号以及C#项目中各文件的含义 用记事本打开vs项目的.sln文件. 第2行就是这个源代码包的开发软件vs版本号了 注意了,如果是vs2003的sln文件通常没有这行,可以判断 ...

  3. Python Extension Packages下载链接

    一.http://www.lfd.uci.edu/~gohlke/pythonlibs/ 下载后可使用pip包管理器进行安装,在命令行中输入: pip install 安装包的路径

  4. leetcode 211. Add and Search Word - Data structure design Trie树

    题目链接 写一个数据结构, 支持两种操作. 加入一个字符串, 查找一个字符串是否存在.查找的时候, '.'可以代表任意一个字符. 显然是Trie树, 添加就是正常的添加, 查找的时候只要dfs查找就可 ...

  5. vagrant 入门1

    1. Vagrant功能:      Vagrant usesOracle's VirtualBox to build configurable, lightweight, and portable ...

  6. Android 网络交互之MD5为什么要加盐

    MD5为什么要加盐 之前面试的时候,遇到一个面试的哥哥.不停的跟我确认我对网络传输过程中的password进行MD5加密的时候,是否加key了. 当时我很纳闷,因为MD5本身已经是不可逆的了,需要破解 ...

  7. 警告:‘xxxx’ 将随后被初始化

    关于编译报警告.本次是接手一个新手的代码,总共不到1K行的代码.两个类.编译的时候报的警告,本来也不打算管理这个事情的.要求也不会有那么严格.但上午看完代码后,觉得毕竟是新手写的代码,还是有很多需要修 ...

  8. mysql语句:批量更新多条记录的不同值

    mysql更新语句很简单,更新一条数据的某个字段,一般这样写: 1 UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_va ...

  9. HDoj-1527-取石子游戏

    取石子游戏 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  10. CPU指令的流水线运行

    指令集是CPU体系架构的重要组成部分.C语言的语法是对解决现实问题的运算和流程的方法的高度概况和抽象,其主要为算术.逻辑运算和分支控制,而指令集就是对这些抽象的详细支持,汇编仅仅只是是为了让开发者更好 ...