Git命令非主流札记
使用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命令非主流札记的更多相关文章
- Git初探--笔记整理和Git命令详解
几个重要的概念 首先先明确几个概念: WorkPlace : 工作区 Index: 暂存区 Repository: 本地仓库/版本库 Remote: 远程仓库 当在Remote(如Github)上面c ...
- 工作中常用的git命令
一 常用Git命令 git clone:(区分SSH or HTTP) git init:初始化仓库 二 Git命令详解 Git Bash下,cd /c git clone,从远程Git版本库克隆一份 ...
- 常用 Git 命令清单
我每天使用 Git ,但是很多命令记不住. 一般来说,日常使用只要记住下图6个命令,就可以了.但是熟练使用,恐怕要记住60-100个命令. 下面是我整理的常用 Git 命令清单.几个专用名词的译名如下 ...
- 常look的Git命令
常用的Git命令 命令 简要说明 git add 添加至暂存区 git add–interactive 交互式添加 git apply 应用补丁 git am 应用邮件格式补丁 git a ...
- ***Linux下使用git命令及github项目
在linux下搭建git环境1.创建Github账号,https://github.com2.Linux创建SSH密钥: ssh-keygen ##一直默认就可以了 3.将公钥加入到Github账户 ...
- 我所记录的git命令(非常实用)
一.前言 记录一下工作中常用到的git命令,只是简单的笔记,欢迎大家交流... [ 顺便问下园友们,怎么感觉博客园发布的博客搜索有时都搜不到,后台编辑能填的都填写了,还是觉得搜索排名不高? 相同的标题 ...
- GIT命令行的使用
新手了解 有不对的地方指点下 首先, 了解下什么是GIT,GIT是一款开元的分布式版本控制工具, 在世界上的所有分布式版本控制工具中,GIT是最简单,最流行,同时也是最常用的 相比于其他版本的控制工具 ...
- 简明 Git 命令速查表(中文版)
原文引用地址:https://github.com/flyhigher139/Git-Cheat-Sheet/blob/master/Git%20Cheat%20Sheet-Zh.md在Github上 ...
- 常用 Git 命令清单 转
我每天使用 Git ,但是很多命令记不住. 一般来说,日常使用只要记住下图6个命令,就可以了.但是熟练使用,恐怕要记住60-100个命令. 下面是我整理的常用 Git 命令清单.几个专用名词的译名如下 ...
随机推荐
- linq to sql用partial扩展属性,创建一个部分类(用于多表连接)
1.在窗体中创建dataGridView显示表: using System; using System.Collections.Generic; using System.ComponentModel ...
- LightOJ 1317
Time Limit:2000MS Memory Limit:32768KB 64bit IO Format:%lld & %lluDescription You probab ...
- 【原创】MapGIS K9 三维二次开发入门
开发语言:C# 平台版本:MapGIS K9 SP3 MapGIS K9三维平台也提供了接口和组件以实现二次开发.用户可以根据提供的接口和组件进行二次开发,也可以借助MapGISK9数据中心框架,可以 ...
- (IOS)签名Demo
思路是将每一次按下屏幕的touch move时的点存到一个数组里,即一个数组相当于一个笔画:再将该代表笔画的数组保存到一个大数组中,每组每次touch的移动都历遍大数组和笔画数组,将点于点之间连接起来 ...
- PDF417码
PDF417码是由留美华人王寅敬(音)博士发明的.PDF是取英文Portable Data File三个单词的首字母的缩写,意为“便携数据文件”.因为组成条码的每一符号字符都是由4个条和4个空构成,如 ...
- HDU 4642 (13.08.25)
Fliping game Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...
- Android:源码环境下移植第三方的apk内置到ROM(System Image)中
1. 首先在vendor目录下新建一个the3rdapk的目录,将需要内置的apk丢进去,目录名自己随意定. 2. 在 build/target/product/common.mk最后面,在$(cal ...
- VS 2013上Python的配置
最近有点不务正业,去看了下Python (主要是学校OJ有这个语言,然后可以轻松解决大数据问题,不要说我太坑~~~) 目前感觉python和matlab有些类似,缺少了变量类型声明,总感觉自己写出来的 ...
- Android 中 GridView 常用属性合集
GridView的一些常用属性: android:numColumns=”auto_fit” //GridView的列数设置为自动 android:columnWidth=”90dp " / ...
- javascript 简单实现对两个数组相似度的检验
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...