12个git实战建议和技巧

摘要: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:[email protected]: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
  5. )

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

Git版本控制软件结合GitHub从入门到精通常用命令学习手册
http://www.ihref.com/read-16369.html

时间: 2024-10-10 09:22:49

12个git实战建议和技巧的相关文章

iOS-------应用性能调优的25个建议和技巧

性能对 iOS 应用的开发尤其重要,如果你的应用失去反应或者很慢,失望的用户会把他们的失望写满App Store的评论.然而由于iOS设备的限制,有时搞好性能是一件难事.开发过程中你会有很多需要注意的事项,你也很容易在做出选择时忘记考虑性能影响. 这正是我写下这篇文章的原因.这篇文章以一个方便查看的核对表的形式整合了你可以用来提升你app性能的25条建议和技巧. 请耐心读完这篇文章,为你未来的app提个速! 注意:每在优化代码之前,你都要注意一个问题,不要养成”预优化”代码的错误习惯.时常使用I

(转) iOS应用性能调优的25个建议和技巧

From: http://www.cocoachina.com/ios/20150408/11501.html 英文原文:raywenderlich,感谢@路塔石 的热心翻译.:) 译文链接:http://blog.jobbole.com/37984/ 写在前面 本文来自iOS Tutorial Team 的 Marcelo Fabri,他是Movile的一名 iOS 程序员.这是他的个人网站:http://www.marcelofabri.com/,你还可以在Twitter上关注@marcel

IOS 性能优化的建议和技巧

IOS 性能优化的建议和技巧 本文来自iOS Tutorial Team 的 Marcelo Fabri,他是Movile的一名 iOS 程序员.这是他的个人网站:http://www.marcelofabri.com/,你还可以在Twitter上关注@marcelofabri_. 性能对 iOS 应用的开发尤其重要,如果你的应用失去反应或者很慢,失望的用户会把他们的失望写满App Store的评论.然而由于iOS设备的限制,有时搞好性能是一件难事.开发过程中你会有很多需要注意的事项,你也很容易

Git实战(三)环境搭建

上次的博文中,我们介绍了一下关于Git作为版本控制工具的基本原理,接下来我们来搭建一个基本的Git环境(由于我使用的是Windows系统,所以重点侧重在这方面). Git安装 Git的安装非常简单,这里就不再多作介绍了,给大家提供一个官方参考文档 http://git-scm.com/book/zh/%E8%B5%B7%E6%AD%A5-%E5%AE%89%E8%A3%85-Git Git中文环境 默认情况下,Git的Shell环境下是使用命令是无法显示中文字符的,为了显示中文,我们可以在使用命

iOS应用性能调优25个建议和技巧

写在前面 本文来自iOS Tutorial Team 的 Marcelo Fabri,他是Movile的一名 iOS 程序员.这是他的个人网站:http://www.marcelofabri.com/,你还可以在Twitter上关注@marcelofabri_. 性能对 iOS 应用的开发尤其重要,如果你的应用失去反应或者很慢,失望的用户会把他们的失望写满App Store的评论.然而由于iOS设备的限制,有时搞好性能是一件难事.开发过程中你会有很多需要注意的事项,你也很容易在做出选择时忘记考虑

提高iOS App性能的建议和技巧

当我们开发iOS应用时,好的性能对我们的App来说是很重要的.你的用户也希望如此,但是如果你的app表现的反应迟钝或者很慢就会让你得到不好的评论. 然而,由于IOS设备的限制有时很难工作得很正确.我们开发时有很多需要我们记住这些容易忘记的决定对性能的影响. 这是为什么我写这篇文章的原因.这篇文章用备忘录的形式集合了25个技巧和诀窍可以用来提高你的app性能.所以耐心的阅读来给你未来的App一个很不错的提高. Note:在优化代码之前,必须保证有个需要解决的问题!不要陷入"pre-optimizi

Git实战(四)状态转换

上次的Git实战(三)环境搭建博文,我们大致讲解了一下git的环境安装,今天我们讲解一下Git的状态转换. 学习版本控制工具,对工具进行版本控制之间的状态转换非常重要.毕竟Git只是一个工具,如果不了解工具的每一步操作都是为什么,那么学习Git也就没有多大意义了. Git初始化 在学习Git状态转换之前,我们先来认识一下Git的初始化,即在本地创建一个Git版本库.与SVN在服务器上创建唯一的版本库不同,Git版本库可以随客户端需要自由在客户端创建,其个数和位置不受任何限制.git初始化命令,如

你需要知道的12个Git高级命令

众所周知,Git目前已经是分布式版本控制领域的翘楚,围绕着Git形成了完整的生态圈.学习Git,首先当然是学习Git的基本工作流.相比于SVN等传统版本控制系统来说,Git是专为分布式版本控制而生的强大工具.使用Git时常用的命令有pull.commit.push等,貌似很简单.不过,有时你会遇到合并冲突的情况,Git这时会将冲突标记出来,需要你手工来解决.有时,你会不小心将代码提交到错误的分支上,并且又推送到了远程仓库.还有些时候,你需要切换到不同的分支,但Git却不让你这么做,因为还有未保存

Git实战(二)原理

上次的博文Git实战(一)版本号控制概述中我们简介了一下版本号控制系统的概念,重点对版本号控制的三种类型进行了分析和对照,从本篇博文開始我们进入Git的世界,首先介绍一下Git实现版本号控制的原理. Git与SVN等其它版本号控制系统的最重要的一点差别在于,Git仅仅关心文件数据的总体是否变化,而不是关心文件内容的差异. SVN等原理分析        怎样理解呢?我们能够通过两种图进行比較,首先看一下SVN等其它版本号控制系统的原理图,例如以下所看到的: 在上述图片中,横向表示各个版本号,纵向