`
xpp02
  • 浏览: 1071121 次
社区版块
存档分类
最新评论

12个git实战建议和技巧

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

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


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

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

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

为当前项目设置pager:

  1. $gitconfigcore.pager'less-r'

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

  1. $gitconfig--globalcore.pager'less-r'

2.设置全局代理


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

  1. gitconfig--globalhttps.proxyhttps://user:password@address:port

3.clone某个特定分支


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

  1. mkdir$BRANCH
  2. cd$BRANCH
  3. gitinit
  4. gitremoteadd-t$BRANCH-forigin$REMOTE_REPO
  5. gitcheckout$BRANCH

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


很简单:

  1. gitdifflocalbranchremotebranchfilepath

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


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

  1. gitlog--diff-filter=D--summary

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

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

  1. gitlog--diff-filter=D--summary|grepdelete

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


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

  1. gitrev-list--all|(
  2. whilereadrevision;do
  3. gitgrep-F'Yoursearchstring'$revision
  4. done
  5. )

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


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

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

  1. git--git-dir=../some_other_repo/.gitformat-patch-k-1--stdout<commitSHA>|gitam-3-k

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


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

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

1.切换到better_brach分支:

  1. gitcheckoutbetter_branch

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

  1. gitmerge--strategy=oursmaster

3.切回mater

  1. gitcheckoutmaster

4.快速合并

  1. gitmergebetter_branch

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

  1. gitmerge--strategy=ours--no-commitmaster
  2. gitcommit#Hereaddyourcustommessagetothecommittemplate

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


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

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

  1. gitcheckout--orphannewroot
  2. gitrm--cached-r.
  3. gitclean-f-d

2.创建空的commit

  1. gitcommit--allow-empty-m'[empty]initialcommit'

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

  1. gitrebase--ontonewroot--rootmaster

4.删除临时分支newroot

  1. gitbranch-dnewroot

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

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


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

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

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

  1. gitcheckout-bbranch_to_zero

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

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

  1. gitreset--hardinitial_commit

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


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

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

  1. $gitrebasebbc643cd^--interactive

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

  1. $gitadd<filepattern>

现在你就可以使用

  1. $gitcommit--amend

来修改commit,之后使用

  1. $gitrebase--continue

返回之前最新的commit。

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


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

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

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

  1. gitrebase-ilast_good_commit

将某些变化标记为edit:

  1. gitresetHEAD^
  2. gitaddfile1file2file3

添加相应的文件:

  1. gitaddfile1file2file3

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

  1. gitstash--keep-index

别忘了收尾:

  1. gitcommit
  2. gitstashpop

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

  1. gitrebase--continue

原文链接:durdn.com

分享到:
评论

相关推荐

    Git常用命令详解与实战技巧-Java开发者面试必备工具

    内容概要:本文档详细列出了63条Git常用命令,涵盖了从基本配置到复杂分支管理、变更历史追踪、标签管理和远程交互等多个方面。每个部分不仅提供了具体的命令行指令,还解释了它们的应用场景和具体用法。这使得...

    看日记学git

    从给定的文件信息来看,《看日记学git》是一系列旨在通过日常学习记录来教授Git版本...这种从实战出发的学习方法,对于初学者来说尤为适用,能够帮助他们在实践中掌握Git的使用技巧,逐步建立起对Git的信心和熟练度。

    Git常用命令面试题 60道.pdf

    Git是一个分布式版本控制系统,广泛应用于软件开发中的代码管理和协作。...对于新手而言,建议通过实战练习来加深理解和记忆,而对于老司机来说,复习这些基础命令,有时也能发现新的用法或提升工作效率的技巧。

    git中文教程

    综合上述,Git中文教程通过介绍Git的各种工作流和实战操作,帮助读者从SVN的集中式版本控制思维过渡到Git的分布式版本控制,理解并掌握Git的分支操作、合并策略和冲突解决方法,进而熟练运用Pull Request进行有效的...

    2024年最新:常用Git命令速查手册全面指南

    内容概要:本文档是一份详尽的 Git 命令速查手册,分为四个部分介绍 Git 的基础操作、...阅读建议:本手册不仅提供简洁的操作指南,还包含丰富的实战案例和具体应用场景,建议读者边学边练,动手实践以加深理解和记忆。

    git命令 总结

    ### git命令总结 在软件开发领域,版本...对于软件开发者而言,熟练掌握Git的基本操作和进阶技巧,能够极大地提高工作效率和个人能力。希望本篇文章能帮助读者更好地理解并运用Git,为日常的开发工作提供便利和支持。

    前端开发学习方法与实战建议.pdf

    前端开发是一个不断变化和发展的领域,掌握正确的学习方法和技巧,持续跟进最新的技术潮流,对于任何一个立志成为优秀前端工程师的学习者而言,都是至关重要的。随着Web技术的不断发展,前端开发者的角色将变得...

    经典vue实战教程

    根据提供的文件信息,我们可以从标题、描述以及部分可见内容中推断出这是一份关于Vue.js实战技巧的教程。下面将基于这些有限的信息展开详细的知识点解析。 ### 经典Vue实战教程 #### 一、Vue.js简介 - **定义**:...

    C#开发实战1200例(1卷)(带目录)

    3. **阅读源码**:尝试阅读开源项目的源码,了解优秀的设计模式和编程技巧。 4. **持续跟进新技术**:C#语言每年都在发展,关注官方文档和技术博客,了解最新的特性和最佳实践。 通过上述分析,我们可以看出《C#...

    StarWarsRepository:Git仓库

    本篇将围绕"StarWarsRepository"这一主题,深入探讨如何利用Git进行项目管理和协作,通过实际案例——星球大战资料库,来学习和掌握Git的基础操作以及GitHub的使用技巧。 一、Git基础概念 1. Git是什么:Git是一种...

    Eclipse教程-Eclipse实战视频教程

    4. 设置工作空间:首次启动Eclipse时,它会提示你选择一个工作空间,这是保存项目和配置的地方。你可以根据个人喜好设置。 二、Eclipse使用教程 1. 创建新项目:在Eclipse中,你可以通过“File” &gt; “New” &gt; ...

    Idea实战操作指南.zip

    本指南将深入探讨IDEA的一些核心功能和实用技巧,帮助用户提升开发效率。 一、项目管理与设置 1. 创建新项目:在IDEA中,可以通过“File” -&gt; “New” -&gt; “Project”来创建一个新的项目。选择相应的项目类型,如...

    Android平板电脑开发实战详解和典型案例

    综上所述,“Android平板电脑开发实战详解和典型案例”这一主题涵盖了从基础知识到实战技巧再到具体案例分析等多个方面。无论是初学者还是有一定经验的开发者,都可以从中学习到很多有价值的信息。对于想要深入研究...

    Curso-git-github-thinkTEd:Esterepositóriocontémos arquivos usados no curso de git e github

    通过"Curso-git-github-thinkTEd"中的教程,你可以逐步掌握Git和GitHub的使用技巧,从而在实际项目开发中更加高效、安全地管理代码。无论是个人项目还是团队协作,Git和GitHub都能成为你的得力助手。

    全栈性能测试修炼宝典JMeter实战+零成本实现WEB性能测试 基于APACHE JMETER

    通过学习《全栈性能测试修炼宝典JMeter实战》和《零成本实现WEB性能测试 基于APACHE JMETER》,读者不仅可以掌握JMeter的使用技巧,还能理解性能测试的全过程,从而在实际工作中提升Web应用的性能和稳定性。...

    X2000项目实战入门1-10

    总结而言,X2000项目实战入门1-10课程是一门全面的实战培训,着重于让学员掌握国产X2000芯片的使用、Linux产品设计方法及底层驱动与应用软件开发技巧,帮助学员提升在Linux开发领域的专业能力和实战经验。...

    hyperblog:博客不可思议的Para de curso de Git和Github de Platzi

    要深入学习Git和GitHub,可以参考Platzi的课程,它提供了丰富的教程和实战项目,帮助初学者快速掌握这两个工具。同时,了解HTML的基本语法和最佳实践对于构建博客至关重要,可以通过在线教程、书籍或动手实践来提升...

    北大青鸟S2项目实战青鸟影院售票系统

    【北大青鸟S2项目实战青鸟影院售票系统】是一个为学员设计的实践项目,旨在提升他们的编程技能和实际开发经验。这个系统涵盖了电影票务管理的核心功能,为用户提供了一个模拟真实影院购票环境的平台。在本项目中,...

Global site tag (gtag.js) - Google Analytics