前言
工欲善其事,必先利其器。使用git有一段时间了,一直玩的不深,趁此总结一番,捋捋思路。
正经说事
-
git config --global alias.xx xxxx
都说不会偷懒的程序员不是好程序员,有些git命令很长,逐字敲总觉得差点意思。万能的git当然早有准备,提供了别名
功能。举个栗子
设置别名
$ git config --global alias.co checkout
$ git config --global alias.cmt commit
$ git config --global alias.st status
so,对应的,操作就变成了
$ git co branchname
$ git cmt -m "description"
$ git st
有没有很简洁
-
git rebase -i <commitid>^
rebase好好用,手动划重点
设想你已经commit了,突然发现,有行日志需要加,有段多余代码忘了删......如此种种。几趟下来,大小commit堆了三五个,提交之后,日志看起来未免零散,需要对commit进行合并。
执行git rebase -i "commitID"^
(^表示上一次,即包含ID指向的提交)
此时弹出编辑界面如下
整行删除或将pick改为drop都可将此次commit删除
对比前后log, 47a5a是不是真的看不到了
drop前
drop后 -
操作前git rebase <branchname>
神奇的rebase(变基)还有许多功能
最常用如git rebase <branchname>
指令如其名,先上几张merge跟rebase操作的对比图直观感受一下
执行git merge
后
操作日志
执行git rebase
后
操作日志
如果说光看分支结构图只知道rebase很干净的把四次提交合并成一条直线的话,reflog
就很清晰的告诉我们,rebase
操作执行后,branch2分支的两次提交,真的成功“变基”,重新生成了两次提交,“入赘”到branch1的提交之后啦。
那么,变基之后,两分支新的提交都是以此“入赘”点出发生成了对嘛?不急,再试一发对比图
git rebase branch1
后,两分支分别再次提交
git merge branch1
后,两分支分别再次提交
ok,完美验证 -
git tag
除了切换到某个branch,某次commit,我们有可能还需要切回某个成型的版本。比如,“xx你看一下,2.0那个版本用户投诉有个什么什么问题......”,那么这个时候,只需要'git checkout <tagname>',就可以一秒回到解放前啦没毛病
几个常用命令:
git tag <tagname>打标签
git tag 查看所有标签
git tag <tagname> <commitid> 对某次commit打标签
git show <tagname> 查看标签信息
git tag -a <tagname> -m "description" 创建带有说明的标签
git push origin <tagname> 发布标签
git push origin --tags 提交本地所有标签
git checkout <tagname> 切换到标签 -
git reset
另一个时光倒流的命令当然要说说 git reset,
常用指令:
git reset HEAD <file> 撤销对file的add操作
(git checkout -- <file> 撤销file在工作区的所有修改)
git reset HEAD^ 回退到上一版本(保留本地代码)
git reset --hard HEAD^ 回退到上一版本(撤销本地修改)
git reset --hard <commitid> 回退到某次提交(撤销本地修改) -
git gui
执行命令,显示视图界面,如下
改动一目了然,再也不用担心手抖提交了本地测试代码了
最后
Git门道深似海,研习还需下苦功,道行甚浅,还请盆友们多多指教。
网友评论