25个Git用法技巧

Andy Jeffries 给 Git 中级用户总结分享的 25 个小贴士。你不需要去做大量搜索,或许这些小贴士对你就很有帮助的。

我从开始使用git到现在已经差不多18个月了,以为自己已经很懂git了。直到我看到github上 Scott Chacon在 LVS, a supplier/developer of betting/gaming software 上的教学,第一天就受益匪浅。

作为一个很享受git的人,我想要分享从各种社区学到的实用经验,让大家不需要花费过多的功夫就能找到答案。

GitHub 教程系列文章:

GitHub 使用教程图文详解

Git 标签管理详解

Git 分支管理详解

Git 远程仓库详解

Git 本地仓库(Repository)详解

Git 服务器搭建与客户端安装

Git 概述

基本技巧1.安装后的第一步

安装git后,第一件事你需要设置你的名字和邮箱,因为每次提交都需要这些信息。

$ git config –global user.name “Some One”$ git config –global user.email “[email protected]”2.是基于指针的

git上的所有东西都是储存在文件里的,当你创建一次提交时,它会创建一个包含你的提交信息和相关数据(名字,邮箱,日期/时间、上一次提交等等)的文件并连接一个树文件,而这个树文件包含了对象列表或者其他树。这上面的对象或者blob文件就是这次提交的实际内容(你可以认为这也是一个文件,,尽管并没有储存在对象里而是储存在树中)。所有的文件都以经过SHA-1计算后的文件名(译者注:经过SHA-1计算后的数,即git中的版本号)储存在上面。

从这里可以看出,分支和标签都是包含一个指向这次提交的sha-1数(版本号)简单的文件,这样使用引用会变得更快和更灵活,创建一个新的分支是就像创建文件一样简单,SHA – 1数(版本号)也会引用你这个分支的提交。当然,如果你使用GIT命令行工具(或者GUI)你将无法接触这些。但真的很简单。

你可能听说过HEAD引用,这是一个指向你当前提交的内容的SHA-1 数(版本号)的指针。如果你正在解决合并冲突,使用HEAD不会对你的特定分支有任何改动只会指向你当前的分支。

所有分支的指针都保存在 .git/refs/heads,HEAD指针保存在.git/HEAD,标签则保存在 .git/refs/tags,有时间就去看看吧。

3. 两个母体(Parent),当然!

当我们在日志文件中查看合并提交信息,你会看到两个母体,第一个母体是正在进行的分支,第二个是你要合并的分支。

4.合并冲突

现在,我发现有合并冲突并解决了它,这是一件在我们编辑文件时很正常的事。将 <<<<, ====, >>>> 这些标记移除后,并保存你想要保存的代码。有些时候在代码被直接替代之前,能看到冲突是件挺不错的事。比如在两个冲突的分支变动之前,可以用这样的命令方式:

$ git diff –mergediff –cc dummy.rb index 5175dde,0c65895..4a00477 — a/dummy.rb+++ b/dummy.rb@@@ -1,5 -1,5 +1,5 @@@ class MyFoodef say-puts “Bonjour” – puts “Hello world”++ puts “Annyong Haseyo”end endIf the file is binary, diffing files isn’t so easy… What you’ll normally want to do is to try each version of the binary file and decide which one to use (or manually copy portions over in the binary file’s editor). To pull a copy of the file from a particular branch (say you’re merging master and feature132):

如果是二进制文件(binary),区别这些文件并不容易。通常你会查看每个二进制文件的版本,再决定使用哪个(或者在二进制文件编辑器中手动复制),并将其推送至特定的分支。(比如你要合并master和feature132)

$ git checkout master flash/foo.fla # or…$ git checkout feature132 flash/foo.fla$ # Then…$ git add flash/foo.flaAnother way is to cat the file from git – you can do this to another filename then copy the correct file over (when you’ve decided which it is) to the normal filename:

另一个方法就是在git中cat文件,你可以将其命名为另一个文件名,然后将你决定的那个文件改为正确的文件名:

$ git show master:flash/foo.fla > master-foo.fla$ git show feature132:flash/foo.fla > feature132-foo.fla$ # Check out master-foo.fla and feature132-foo.fla$ # Let’s say we decide that feature132’s is correct$ rm flash/foo.fla$ mv feature132-foo.fla flash/foo.fla$ rm master-foo.fla$ git add flash/foo.fla

更新:感谢carls在原博评论中提醒我,可以使用 “git checkout —ours flash/foo.fla” 和“git checkout —theirs flash/foo.fla” 在不用考虑你需要合并的分支来检查指定版本,就我个人而言,我喜欢更明确的方法,但这也是一个选择…

记住,解决完合并冲突后要添加文件。(我之前就犯过这样的错误)

服务,分支和标注5. 远程服务

Git有一个非常强大的特性,就是可以有多个远程服务端(以及你运行的一个本地仓库)。你不需要总是进行访问,你可以有多个服务端并能从其中一个(合并工作)读取再写入另一个。添加一个远程服务端很简单:

$ git remote add john [email protected]:johnsomeone/someproject.gitIf you want to see information about your remote servers you can do:

如果你想查看远程服务端的信息你可以:

# shows URLs of each remote server$ git remote -v# gives more details about each$ git remote show nameYou can always see the differences between a local branch and a remote branch:

你总是能看到本地分支和远程分支不同的地方:

$ git diff master..john/masterYou can also see the changes on HEAD that aren’t on that remote branch:

你同样也能看到远程分支上没有的HEAD指针的改动:

$ git log remote/branch..# Note: no final refspec after ..6. Tagging 标签

在Git中有两种类型的标注:轻量级标注和注释型标注。

记住第二个是Git的指针基础,两者区别很简单,轻量级标注是简单命名提交的指针,你可以将其指向另一个提交。注释型标注是一个有信息和历史并指向标注对象的名字指针,它有着自己的信息,如果需要的话,可以进行GPG标记。

创建两种类型的标签很简单(其中一个命令行有改动)

$ git tag to-be-tested$ git tag -a v1.1.0 # Prompts for a tag message7. Creating Branches 创建分支

在git中创建分支是件非常简单的事情(非常快并只需要不到100byte的文件大小)。创建新分支并切换到该分支,通常是下面这样的:

$ git branch feature132$ git checkout feature132

当然,如果你想切换到该分支,最直接的方式是使用这样一条命令:

$ git checkout -b feature132

如果你想要重新命名本地分支,也很简单:

$ git checkout -b twitter-experiment feature132$ git branch -d feature132因为有梦,所以勇敢出发,选择出发,便只顾风雨兼程。

25个Git用法技巧

相关文章:

你感兴趣的文章:

标签云: