简单来说就是这七点:使用gitrebase让commit记录更清晰可读使用gitreflog+gitreset跳转到任意commit使用gitcherry-pick获取指定commit使用gitcommit--amend更改提交内容使用gitrevert回滚某次提交使用gitstash临时存储文件配置gitalias提高工作效率使用gitrebase使提交记录更清晰可读基本用法rebase翻译过来就是rebase,它的作用类似于merge。用于将一个分支的修改合并到当前分支中,如下图所示。rebase之后,commithistory的变化不理解单一分支的好处。可以看看知乎上的这个问题:Git提交历史怎么这么爽?Vue的作者游雨溪说:multi-purposerebase。具体用法:基于master分支创建一个feature分支,在feature分支上开发一个featurepoint,在master上提交commit。在feature分支上执行gitrebasemaster,意思是最终提交master分支作为起点,逐一应用feature的每个更改。gitrebaseVSgitmerge合并分支有两种,即rebase和mergemerge翻译成merge,即gitmergebranchname,也就是合并分支的代号。这个方法会保存每一次提交,当你用gitk查看的时候,你会发现有几条彩色的线。另一种是rebase,也就是把一系列的commit记录去掉,“复制”下来,然后在另一个地方一个一个的放下。所以rebase的优势很明显,它可以创建更清晰的commit记录,但是merge会保留你所有commit的历史。当开发者多了,历史就会变得扑朔迷离。rebase的交互方式,在开发过程中,通常会在一个分支上产生大量的无效提交。这种情况下,使用rebase的交互方式可以将多个commit压缩为一个commit,得到一个干净的commithistory#先看commitgitlog#f9f6f3bcommit3#2feb45fcommit2#07a3cb6commit1#如果我们要修改2,变基到它的下一个一个commit,这里是1gitrebase07a3cb6-i#然后在打开的对话框中修改,然后一个rebase继续gitrebase-i#或者gitrebase-iHEAD~2对最后两个commit合并也是叫做后悔药功能,就是不管你写什么commit,最后都可以修改,不管提交什么,都可以merge。DIY很强。使用gitreflog+gitreset跳转到任何提交。也就是说,它被称为时间机器,即通过查找所有分支的所有操作记录(包括删除的commit记录和reset操作),通过resetHEADreflog#afa2f45HEAD@{10}:checkout跳转到指定的commit:从今天走向明天#4abcda5HEAD@{11}:commit:开1800仙窍#de42069HEAD@{12}:commit:真言轮经大成gitresetHEAD@{10}#或gitreset--hardafa2f45中这样,你就会返回到afa2f45commit,熟悉的任何了解“时间法则”和“时间机器”的人都知道这是回到过去,使用gitcherry-pick获取指定的commit意味着“挑选”犯罪。与merge合并一个分支的所有commit不同,它会得到该分支的某个单个提交,并作为一个新的提交连接到当前分支。很容易理解,张三在分支上开发功能,对每个功能点提交一次commit,一共提交6个功能点(分别为feature1~feature6),然后返回第一个提交点,即,他使用gitreset--hardfeature1跳转到第一个commit,并在此基础上开发了一个新的feature,即feature7,那么如果feature7合并到feature6中怎么办呢?gitreflog#gitreflog查看所有分支的所有操作记录(包括删除的commit记录和reset操作)#找到feature7的commit4c97ff3#回到feature6c的commitd52afcgitreset--hardcd52afc#使用cherry-pick获取feature7的代码gitcherry-pick4c97ff3具体可以看这篇小蝌蚪传:git时光穿梭--女神的侧脸去体验简单一句话,你的每一次commit都是一条记录,可以合并到任何地方,所以开发功能点或者修复bug,尽量每个功能点都做一次commit,这样出错的时候挑代码方便发生使用gitcommit--amend改变提交的内容amend意思是修正#继续修改你的文件gitadd。gitcommit--amend--no-edit#你这次的修改会被加入到最新的commit中,并合并到最后的commit中gitcommit--amend:弹出让你修改内容gitcommit--amend--no-edit:保留最后一次提交的内容PS:如果你的代码已经被推送了,请谨慎使用,因为它会修改提交历史。使用gitrevert回滚某个提交。上面提到了一个回滚操作:gitreset--hardxxx,可以回到某个commit。另外还有一种可以撤销某个commit#首先找到你要撤销的commithash值gitloggitrevert这个方法会创建一个新的commitmessage来撤销之前的修改。而gitreset会直接将记录提交回指定的commit。所以就个人开发或者个人特性分支来说,gitreset可以用来回滚代码,但是gitrevert更适合多人协作整合分支。这样提交历史不会被抹掉,可以安全撤回。使用gitstash暂存文件,顾名思义就是暂存本地的改动。area):本地电脑看到的文件和目录Index/Stage(暂存区):一般存放在.仓库):当你gitclone地址的时候,远程仓库被clone到本地仓库。是本地版本库,HEAD指向最新入库的版本。当你执行gitcommit时,文件的改动会转到本地仓库Remote(远程仓库):类似于代码托管平台上的Github、Gitlab、码云等。一个常见的场景是,当你还在开发一个功能点的时候,突然网上出现了一个bug,需要你紧急修复。这个时候可以用gitcommit提交到本地仓库,然后通过gitcommit--amend继续修改原来commit上的内容。但是这里还有另外一种方式,就是把代码存放在暂存区,修复bug后,从暂存区中取出基本命令如下:gitstash#暂存本地改动gitstashsave"message"#执行存储时,添加备注gitstashpop#申请最新的暂存并删除暂存记录gitstashapply#恢复最新的存储,但不会从存储列表中删除该存储。有人使用了第一个存储,也就是stash@{0},如果要使用其他的,gitstashapplystash@{$num}gitstashlist#查看stash中存储了哪些存储gitstashclear#删除所有缓存的stashgitls-files--stage#查看索引暂存区配置gitaliasupgrade工作效率主要是简化命令,其基本用法为gitconfig--globalalias.<简化字符>原命令如下例:gitconfig--globalalias.cocheckoutgitconfig--globalalias.cicommitgitconfig--globalalias.brbranch当然还有一种方式就是设置[alias]st=status-sbco=checkoutbr=branchmg=mergeci=commitds=diff--stageddt=difftoolmt=mergetoollast=log-1HEADlatestinthe.gitconfigfile=for-each-ref--sort=-committerdate--format=\"%(committername)@%(refname:short)[%(committerdate:short)]%(contents)\"ls=log--pretty=format:\"%C(黄色)%h%C(蓝色)%ad%C(红色)%d%C(重置)%s%C(green)[%cn]\"--decorate--date=shortthis=log--pretty=格式:\"%C(黄色)%h%C(红色)%d%C(重置)%s%C(绿色)[%an]%C(蓝色)%ad\"--topo-order--graph--date=shorttype=cat-file-tdump=cat-file-plg=log--color--graph--pretty=format:'%Cred%h%Creset-%C(黄色)%d%Creset%s%Cgreen(%cr)%C(boldblue)<%an>%Creset'--abbrev-commit参考正彩云的配置另外还有一些不常用但有用的命令gitk:打开git的图形toolgitjk:撤销刚刚在git中的操作githelp-g:显示帮助信息cat.git/HEAD:查看分支文件gitfetch--all&&gitreset--hardorigin/master:回到原来的状态远程仓库,丢弃所有本地修改,回到远程仓库的状态gitpush-foriginmaster:强行覆盖远程master引用git时光穿梭机工作中如何使用git程序员必知的Git黄金六大命令让你100%更有效率哦操,Git!?!我如何使用git?