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

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

利用API函数开发DELPHI程序三例 利用Hook技术实现键盘监控-Delphi资料 利用浏览窗口 DragDrop 任意文件-Delphi资料 利用未公开函数实现Shell操作监视-Delphi资料 妙用Delphi的标识号 判断Windows类型和版本-Delphi资料 判断一个程序是否dos版本:-Delphi资料 屏蔽系统按键-Delphi资料 屏幕抓字技术揭密(转载)-Delphi资料 启动控制面板-Delphi资料 取得系统所有窗口的方法-Delphi资料 全部窗体可使用鼠标点中移动-Delphi资料 让图像旋转-Delphi资料 热启动控制-Delphi资料 如果隐藏和显示Windows的任务条-Delphi资料 如何把文件删除到回收站中-Delphi资料 如何从任务栏上隐藏应用程序的按纽?-Delphi资料 如何得到Windows 的temp路径-Delphi资料 如何得到WINDOWS的SYSTEM路径-Delphi资料 如何得到上一个激活的组件-Delphi资料 如何得到系统目录-Delphi资料 如何得到执行程序的当前路径-Delphi资料 如何访问一个进程的内存空间-Delphi资料 如何关CD机的门?-Delphi资料 如何关闭外部开启的应用程序-Delphi资料 如何获得系统内存的有关信息?-Delphi资料 如何获取硬盘的ID-Delphi资料 如何检查软驱中的软盘和光驱的光盘是否发生变化。-Delphi资料 如何检查一个驱动器是否就绪?并且不出现错误信息-Delphi资料 如何将Wav文件做到EXE文件里-Delphi资料 如何将你的程序放在Windows启动中-Delphi资料 DsgnIntf的问题 请问如何让自己的服务可以早点启动(普通服务,不是驱动服务)? 程序员的女人 请教一道网设的题目 请大家介绍几个热门的英文讨论的技术网站给我。 请教一个抽象类的问题 如何在dataset.tabel中将两个表能过双方的两个字段建议关系 高分求高手:jsp中如何获得服务器的网卡地址? 新手,请教C#入门 如何将列表框中所有的值都显示出来,不要有滚动条! 系统软件谁居第一 新人“ gxlxwp1982(我爱Delphi,就像老鼠爱大米)”来了,以后大家多帮忙!!!!1 使用Access数据库的SQL语句问题请教!!!! 谁有软件技术测试报告?给我一份参考一下啦~~~ : [求助]请各位帮帮忙呀! weblogic7.0的端口问题 如何在一个form中使用另一个form? win2kp 如何恢复丢失的桌面? 80年出生的都在干什么? SQL Server7.0升级到SQL Server2000 急需winsock2.h文件 delphi开发的程序在WIN2000,WINXP下运行正常,在WIN98却不行,是怎么回事? 如何在TOMCAT下重定向服务器不存在文件的错误页面 关于JFileChooser中的新建文件夹问题? 请问哪里有sun j2ee 服务器参考实现的源程序下载 今年一定考C++吗 考几道C语言的题目啊~~~~~~~~~~~~ VB调用COM接口,出现类型不匹配,如何解决? 关于拷贝构造函数,诡异。。。 如何使窗体永远在所有窗口的最前面! vsftpd 是配好了,但是登陆不上去 请问如何编程以其他用户的身份来运行一个程序? 我在同一ASMX文件中在某个WebMethod中调用其它的WebMethod出错,说不支持关键字“provider” 100分求进、销、存类程序源码 各位,请教一数据访问时间问题 七天七世纪 希望顶级高手能进来-->用streamReader的ReadLine读中文文件时出现乱码! 扩充话题 灌水乐园 与 程序人生 这两个版面在主题上有什么区别? 大家好阿,哪里有 WINDOWS XP操作系統下載,謝謝,最好不要激活, Webserver在引用时候怎样才能引用他的属性如: 来者有分,小问题 如何在自已的DNS服务器上解析两个不同的域名! 替换一个表中的数据的SQL怎么写 请问微星845GLM 如何实现usb启动 请问有人知道用其他程序把NOTES的工作台打开的方法吗??高分求解! 急!!计算机接通电源后什么反映也没有,硬盘不读,显示器不响应,主板不报警,我将显卡和内存反复插n遍以后,亮过一次,再加一根内存又 请问怎样设置文件的大小,才能大于4G. !!!!!!为什么我每次安装office2000到一半的时候,机器就重新启动了啊???????? 急!!计算机接通电源后什么反映也没有,硬盘不读,显示器不响应,主板不报警,我将显卡和内存反复插n遍以后,亮过一次,再加一根内存又 为什么正确的SQL语句运行会死掉??? 求助:求一在线时间统计程序 举一个缺乏主见的例子.一句话概括的那种, 至尊红颜 武则天去感业寺 是哪一集? 至尊红颜中武媚娘站在一片黄色的花中是哪一集 主见主见女孩问男孩有没有主见什么意思 做事没有主见,缺乏自信 ∠A=1/2∠B=1/3∠C是个什么角 若角A:角B:角C=1:2:3,则角A=()角B=()角C=() 在△ABC中,角A,B,C所对的边分别为a,b,c,A:B:C=3:1:2,则a:b:c=A 1:2:3 B 3:2:1 C 1:根号三 :2 D2:1:根号三 男性生殖器有几个生长阶段,分别是几岁到几岁?在20~25岁是不是还能生长?会变粗吗? 有的同学认为妈妈在迫切找我事,我去躲起来捉弄妈妈,这说明我是个坏孩子,你同意这种说法吗?有的同学认为妈妈在迫切找我时,我去躲起来捉弄妈妈,这说明我是个坏孩子,你同意这种说法吗? 至尊红颜武媚娘身体里面有龙跑出来的是哪一集? 美国新泽西一商场发生枪击事件 暂无人英内阁会议为防监听禁用iPad 高官美新泽西州商场发生枪击 在场民众描述美国西部山区蕴含创业潜力 或成下一个美威州两飞机3000米高空相撞 11德国拒绝为斯诺登提供庇护 避免影响德美建议叙问题会议11月举行 不确信反美新泽西州商场发生枪击 在场民众描述刚果(金)政府拒绝停战 要求反政府武伊朗议长拉里贾尼:美伊关系改善为时尚奥巴马“网络水军”利用推特打医保舆论额敏县住村工作队救助被洪水围困牧民乌苏750千伏变电站扩建工程进入冲刺苏宁多层级布局“双创”生态圈一条\"你是小三\"短信致夫妻翻脸互吉木萨尔县二工镇推出首批特色畜牧产品南台湾地震倒塌大楼致115人死亡案543名香港旺角暴乱参与者受审 10人兵团军事部调研组检查二二二团武装工作额敏县公安交警大队开展“春季行动”若羌各界畅想铁路通车后的美好生活玛纳斯县包家店镇开展美丽女性幸福家庭泡妞作弊器神天空武气横秋狩猎世界无上血脉魔剑骑士风云逍遥仙夏都重生之极品小王爷隐相步步倾心北陲哨所旅游北红村哨所旅游最北一家旅游北红村旅游黑龙江第一湾旅游大连森林动物园旅游俄罗斯风情街旅游金石滩旅游龙岩山国家森林公园旅游玉几岛旅游南诏风情岛旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘