说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

12个git实战建议和技巧

HTML文档下载 WORD文档下载 PDF文档下载
git无疑是现在最热门的版本控制工具,而且正在进一步侵占SVN以及CVS的市场。本文作者从国外技术问答社区Stack Overflow整理的12个很实用的git使用技巧和建议,希望对你有帮助。

1.使用“git diff”来折叠多行


用git diff经常会出现很多内容,导致很多内容被遮住了,让人很是苦恼,幸运的是这里有个解决方案。

如果你使用less作为默认的pager,只需要输入-s,就可以保证不会被diff刷屏了。

或者,你也可以使用git config设置pager来达到同样的效果:

为当前项目设置pager:

  1. $ git config core.pager 'less -r'  

再将pager设置的作用域设置为整个项目:

  1. $ git config --global core.pager 'less -r'  

2.设置全局代理


在某些网络环境下,你可能需要为git配置代理,这很简单,只需要一行命令就可以了:

  1. git config --global https.proxy https://user:password@address:port 

3.clone某个特定分支


在某些大型项目中,或者只是图方便,有时候你可能只希望clone某个分支,你可以这样做:

  1. mkdir $BRANCH 
  2. cd $BRANCH 
  3. git init 
  4. git remote add -t $BRANCH -f origin $REMOTE_REPO 
  5. git checkout $BRANCH 

4.比较某个文件和远程分支上的区别


很简单:

  1. git diff localbranch remotebranch filepath 

5.列出版本库中所有已删除的文件


也许你是想将其恢复,因此需要仔细确认某些merge操作,无论如何,列出版本库中所有已删除的文件会非常有帮助。你只需要这样做:

  1. git log --diff-filter=D --summary 

如果你想将其恢复,参照这里。

如果你不想知道是哪次commit中删除的,只需要添加一个grep delete。

  1. git log --diff-filter=D --summary | grep delete 

6.在版本库所有版本中搜寻一条字符串


往往你想要查找某段代码、某个函数、一个常量、一个文件,但是却找不到了。它被删除了,什么时候删除的?这个小技巧能搜索整个版本库中git diff信息,可能会花些时间,但是非常有用:

  1. git rev-list --all | ( 
  2.     while read revision; do 
  3.         git grep -F 'Your search string' $revision 
  4.     done 

7.应用另外一个(不相关的)本地版本库中的patch


从另一个版本库中cherry-pick一条提交记录,首先需要将那个版本库作为一个远程版本库添加进来,并fetch其变化,然后cherry-pick其提交记录。

如果你追求速度,也可以使用这个未经优化的命令:

  1. git --git-dir=../some_other_repo/.git format-patch -k -1 --stdout <commit SHA>| git am -3 -k 

8.从新的主干中分出一个新分支


有时候你会在better_brach上工作一段时间,并准备将其设为新的master,你会怎么做?

这里是Stack Overflow上提供的常规解决方案:

1.切换到better_brach分支:

  1. git checkout better_branch 

2.保留better_branch分支全部内容,但是记录合并:

  1. git merge --strategy=ours master 

3.切回mater

  1. git checkout master 

4.快速合并

  1. git merge better_branch 

5.如果你想让合并步骤变得更清晰,可以添加commit信息。只需要修改下第二步:

  1. git merge --strategy=ours --no-commit master 
  2. git commit # Here add your custom message to the commit template 

9.向分支提交一个初始的空commit,保证完全复位


这样会重写历史记录,所以只能在未和任何人分享前做,否则将可能把同事者的文件破坏。

1.创建一个新的空分支,例如:newroot

  1. git checkout --orphan newroot 
  2. git rm --cached -r . 
  3. git clean -f -d 

2.创建空的commit

  1. git commit --allow-empty -m '[empty] initial commit' 

3.重新发送分支的全部内容

  1. git rebase --onto newroot --root master 

4.删除临时分支newroot

  1. git branch -d newroot 

现在master就已经包含了一个空的root commit了。

10.清空一个分支来做些不同的事


有时候你会想要从某个分支重新开始,或者打算保留一些逻辑上和主干相关但是跟踪另一个跨职能方面的代码,就像GitHub项目的gh-pages。

但如果你只想重新开始某个分支,清空所有历史记录呢?

1.检出(checkout)一个分支:

  1. git checkout -b branch_to_zero 

2.跟上条一样,先建立增加一个初始的空commit,之后就可以通过重新设置来清空一个分支。

3.使用hard重置分支到刚刚创建的初始commit:

  1. git reset --hard initial_commit 

11.如何修改一个特定的commit?


当你想在推送前重做你最后的commit时,可以使用修改命令(git commit --amend)。如果你想修改的不是最后一个commit呢?

这种情况下,你可以使用git rebase,例如,你想要修改bbc643cd commit,运行下面的命令:

  1. $git rebase bbc643cd^ --interactive  

在默认的编辑器中选择并修改你期望修改的,然后保存修改并输入:

  1. $ git add <filepattern>  

现在你就可以使用

  1. $git commit --amend 

来修改commit,之后使用

  1. $ git rebase --continue  

返回之前最新的commit。

12.如何隐藏多个已修改文件中一个?


git stash --keep-index命令可以用来隐藏上次commit中没有add的东西,之后add想要提交的文件并运行相应命令就可以了。

按照下面的提示,你可以把一条老的commit提交到多个变更集中:

互动地rebase最后一条好的commit:

  1. git rebase -i last_good_commit 

将某些变化标记为edit:

  1. git reset HEAD^ 
  2. git add file1 file2 file3 

添加相应的文件:

  1. git add file1 file2 file3 

因此之前没有添加的文件:

  1. git stash --keep-index 

别忘了收尾:

  1. git commit 
  2. git stash pop 

有必要的话,重复第二步之后的步骤:

  1. git rebase --continue 

原文链接:durdn.com

挖坟三星“眼球追踪技术”背后的技术团队 为什么开发者热衷在Stack Overflow上查阅API文档? Facebook推新News Feed 欲造就“个性化报纸” 女神程序员的一天:暴力测试social爬虫代码 2013IBM云存储路线图:更快,更简单,更安全 二战大数据故事:数学家、物理学家、概率论击败德国潜艇 软件定义网络服务商Pertino B轮融资2000万 Scringo社交组件,让你的应用“热闹”起来! Android开发必备:Eclipse 4.2 SR2版本发布 32场!2013年360HTML5校园行首站告捷 移动周报:不做内容,只钻技术的快播 一周消息树:中国开源发展缓慢的“病因” 百度应用引擎BAE正式开放 新增支持Node.js CloudVelocity,下一个VMware? Buffer创始人谈开发:先验证,后编程! 谷歌可穿戴式产品再度来袭:会说话的鞋子 未来Chrome OS或取得Android般成功 云落地@北京,北京市北斗公共平台或开放API? GitHub再遭攻击 主要服务中断约一小时 移动开发者将有望拥有.app域名使用权 微信将推“游戏中心”?移动互联网入口圈地加剧 美国航空公司首次开放API 并举办“黑客马拉松”编程大赛 谷歌数据中心设计的10条“黄金法则” GitHub时代:为什么我们都在开源 VMware发布Horizon Suite 三款应用打包折扣低 TOP30+应用排行榜:二月份国内外综合榜单 开源是否意味着不需要负任何责任? 微软年度科技展 酷炫技术知多少 图解Hadoop生态系统 HTML5并不给力 微软IE10又默认启用Flash Oracle出新提案:Java正逼近iOS? 疑问:中国编程人是否年纪太大? 在查询的记录集里怎么增加序号?什么函数? 有关局域网的基础理论问题请教! listview用法问题,急用! 《C++ Primer 3e 題解》簡體中文版 出版了没有呀??? 我把paradox数据库引擎BDE改为ODBC,用户名和密码是什么? VC控件问题 急啊,急啊! 急,关于打包问题 当用查询控件时,返回多个结果,该怎样区分啊?!谢谢! C#里可以实现类似VC++的消息响应吗? 没有人回答吗? 如何在vb中把bmp格式的图片转成jpg或gif的格式 请问在asp中怎么输出显示datetime时间和binary类型的图片? 有关unicode 在调试时,高手指点 非常简单的问题,但我不会,也想不出来,在ms sql server中如何获取特定日期后一个月的日期? 谁对identity column 有研究呀?请进来帮个忙。。 大家好:如何用Delphi报表打印信封,还要有邮政编码,就是像个信封。谢意! 正规表达式,痛苦! 很奇怪的事情!!!month calendar使用的问题!!!!!!! 得不到month calendar控件选中的日期?? vb有vss,delphi有什么? VB7.0与VB6.0不兼容 关于ole编程的问题 来新公司一月了,遇到一个问题,请大家帮忙分析! 数据复制的问题,高分求救! 如何获取TitleBar的尺寸? 创建文件夹的函数及检查是否存在某文件夹的函数?(手册上没有) qqq pcAnywhere操作不能刷新的问题?高手来解救我吧!! 请帮我分析一下为什么会出现这样的错误提示:Access vidation at address 004a36B2 in modale'**.exe'read of address FFFFFFFF CTime和CTimeSpan的使用问题!!!很奇怪??????? 我在写Tuxedo服务程序时,在VC++环境下编译连接时发生以下错误。 关于PDF文件(高分奉送) 来新公司一月了,遇到一个问题,请大家帮忙分析! 谋杀——转贴 打安装包时,提示某些dll过期(很多),怎么办呀? 出生年月与年龄的问题 大家帮帮忙!!!!!!!!!!! 我的天啊!CListCtrl不允许设置行间距和字体大小吗? 如何在40G的硬盘(maxtor)上安装nt4.0 100分(我全部的分),加速,代码优化,JPEG 求救 如何编代码自动创建NT的账号、密码(用什么API实现) 大家看看,我在做一个Messagebox的提示信息时的提示!!!!!奇怪,.net真奇怪 关于计数统计的问题 查某一个人全部贴子的方法。 怎样建立无盘工作站?? pcAnywhere操作不能刷新的问题?高手来解救我吧!! 高手们帮帮忙,我的聊天室怎么不支持中文??? 关于换行的问题??? 各位大侠,请教注册表子项枚举问题?(100分) 修改記錄問題(20)分! 一批零件,甲独做6小时完成,乙独做8小时完成.现在两人合做,完成任务时甲比乙多做24个? 请高手说文解字“country”为什么即是“国家”又是“乡下”这个词的来源是什么,拉丁文还是法语还是什么?为什么国家和乡下这两个毫无关联的意思都用这个词表达,恐怕只能从词源和原始意 这世界上到底有没有无价的 有没有关于外出的80词的英语作文? country怎么用是urban的意思?有时是国家,有时是乡村~怎么分! 孝心无价之中"世上有些东西可以弥补,有些东西永远无法弥补"不能本文指什么无法弥补?为什么这样说? 求一篇社区活动感悟,200字左右内容为劝导清理楼道,收集废电池,垃圾分类 在长12厘米,宽7厘米的长方形里画半径为1厘米的圆最多画多少个? 请不要跟我说友情呀,爱情呀,亲情之类的,我认为这个世界已经没有什么是无价的了,因为所谓的爱情呀,友情呀,如果有钱作基础就会来得更轰烈,更有感情.当然亲情是一种独一无而难言可贵的 假设你是李明,上个星期天你和你的同班同学到公园里快乐的度过了一天.请你给你的笔友Jim写信,词数:80左右提示语:sunny,classmate,go,have a good time,leavefor,on the way,in the park,have lunch,delicious,then,t 说话态度的两字词语,快 无价的东西 社区活动后的感想 (高中)800字 怎么寄信,还有邮票的钱怎么算?我是广东汕头的.想寄给(郑州、内蒙古乌海市、湖北武汉、湖北宜昌、湖南永州、江苏常州市)这些要怎么寄.我第一次寄信,回答的时候说清楚些,恩.还有就是, 我想知道无价的东西有多少? 李明、张华、刘明艳、赵倩、朱亮5位同学组成一个学习小组,星期天集中到其中一位同学家里他们各家之间的距离如下表所示(单位:cm)李 张 刘 赵 朱李 0 张 620 0 刘 780 580 0 赵 450 480 840 0 朱 810 国内寄信邮费怎么算的?贴邮票的,那些80分之类的是什么意思?我想寄信,是在中国国内的,请问下邮费怎么算?要贴邮票,多少钱?要2013年的,不要以前的,不要复制的. 求一篇以 一件难忘的事 为题的作文 求你了~不要写的水平太高 450-500字左右 在长为1.25米,宽为0.8米的长方形纸板上,最多能画多少个半径为20厘米的圆. a 12 b 10 c 6 初三英语作文 介绍你学英语的历程,包括遇到的困难,所采取的方法及效果如何?《80词》 求一篇写一件难忘的事的作文!题目:又是一个XX XX处填季节,写在这个季节里发生的难忘的事,字数300或400字左右. 甲乙两人合作一批零件,计划6小时做完,现在由乙先做1.5小时后,甲再加入合做,完成任务比计划多用5分之3小时,已知甲每小时做54个零件,这批零件一共有多少个零件不要给我像这样的答案:乙1. 初三英语作文:对今后学习英语拟定计划. 求 《我的梦 中国梦》的作文,字数500字左右不要复制.水平初3就行了. 甲乙两人合作一批零件,计划6小时做完,现在由乙先做1.5小时后,甲再加入合做,完成任务比计划多用5分之3小时.这批零件由甲独做需几小时完成? 求一篇初三英语作文,关于从初一到初三变化的,其中最主要的是学习英语的方法的变化 题目《在寒假里一件难忘的事》 甲、乙两人合做一批零件计划6小时做完现在由乙先做1点5小时后甲再加入合做完成任务比计划多用3/5小时,已甲每小时做54个零件,这批零件一共有多少个? 指人物说话、议论的词语 求《中国梦我的梦》作文 ,不要复制最好自己想的,600——1000字之内可以围绕主题畅谈“中国梦”或抒写自己的梦 甲、乙两人合作一批零件,计划6小时做完,现在由乙先做1.5小时后,甲再加入合作,做完任务比计划多用五分之三小时,已知甲每小时做54个零件,这批零件一共有多少个? 描写人物怎样说话的词语 从文化的角度浅析中国传统文化,写篇论文2000字 甲乙两人和做一批零件计划6小时完,现乙先做1点5小时后,甲乙和做,完成任务比计划多用5分之3小时 初三英语作文:写一封信给你的朋友,给他一些关于学习英语的最好的方法的建议 带翻译 急求一篇关于中国传统文化或者 儒家文化与现代生活类型的论文 2000字 300分 跪求一篇1500字以上的社会实践体会活心得(关于春节间打扫街道) 跪求一篇1500字以上的社会实践体会活心得(关于在一工厂打扫的体会与遐想) 描写人物态度坚定的词语一定要是描写任务态度坚定的词语.最少5个. 急求一篇关于马哲与中国传统文化的论文1000字左右 求一篇以“我的梦,中国梦”为题的征文 要原创. 社会实践报告 1500字 来两篇 求给力! 描写人物态度的词语要四个字的. 主题 :我的梦.中国梦 征文1阐述自己对“中国梦”的认识和畅想,书写自己的美丽梦想,表达自己爱祖国、爱家乡……的情怀.2.内容积极向上,事例贴近自己的生活.(诗歌可以不写事例)3.体裁 一张长10厘米,宽8厘米的长方形纸板上剪半径是1厘米的圆,最多可剪多少个? 学校买来6副乒乓球拍和8副羽毛球拍用去共544元. 在极坐标系中,求点p(2,-π/6)到直线L:Psin(θ-π/6)=1的距离要程 社会实践论文3000字 有的谢谢了额 初三英语作文有关于自我调查 把底面积相等的一个圆锥形铁块先后浸没在盛水的长方体的容器中.放入圆锥形铁块后,水面上升2厘米.放入圆柱形铁块后,水面又上升了2厘米.已知圆锥高12厘米,圆柱高几厘米?有一块长15.7厘米 再长是10厘米、宽是7厘米的长方形纸板上最多可以剪多少个半径是1厘米的圆? 以我为我自己骄傲为题,求初三英语作文, 求几篇社会实践活动文章 要求3000多字 字多了些 求描写山水风光的古诗词4首快!是作业!除了《凉州词》、《忆江南》. 文化是什么 文化在哪里 阅读答案 country在什么时候指农村什么时候指国家? 变速自行车有哪些特点和功能? 蚂蚁的文明阅读答案 速回 country在这里是国家的意思?还是乡下的意思?I live in the country. 孝心无价中,为什么作者说"世上有些东西可以弥补,有些东西永无弥补?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘