首页 > 代码库 > [翻译]中级Git用户的25个使用技巧(上)

[翻译]中级Git用户的25个使用技巧(上)

译者:zhanhailiang 日期:2015-01-17

原文链接:25 Tips for Intermediate Git Users

基本技巧

1. 安装git后,需要配置用户名和邮箱:

$ git config --global user.name "Some One"
$ git config --global user.email "someone@gmail.com"

2. git是基于指针的

git中的一切都以文件形式存储,举例:

  1. 每创建一次提交动作,git其实将创建一个文件(.git/refs),其中包含提交注释和相关信息(用户名,邮箱,时间,之前的提交等),并将其与一个树结构文件(.git/objects)关联。这个树结构文件包含对象列表。这些对象或块就是实际提交的修改内容。这些对象以SHA-1哈希命名。
  2. 在git中,branch,tags也是以文件存储(.git/refs/heads),其中存储的是指向当前提交的哈希值。
  3. HEAD(.git/HEAD)也是一个包含指向当前分支提交的哈希值的文件。

3. Two Parents

在git中查看合并提交信息,你将看到Two Parents,其中第一个Parent指向当前分支,第二个Parent指向你想合并的分支。

4. 合并冲突

和svn一样,当遇到合并冲突,需要手动修改<<<<, ====, >>>>部分的内容。

$ git diff --merge
diff --cc dummy.rb  
index 5175dde,0c65895..4a00477  
--- a/dummy.rb
+++ b/dummy.rb
@@@ -1,5 -1,5 +1,5 @@@
  class MyFoo
    def say
-     puts "Bonjour"
 -    puts "Hello world"
++    puts "Annyong Haseyo"
    end
  end

服务器,分支,标签

5. 远程服务器

git中最重要的特性之一是可以支持分布式仓库,从而避免SVN中心式的弊端。你可以在本地汪厍多个读远程服务器,也可以添加多个写远程服务器。

$ git remote add john git@github.com:johnsomeone/someproject.git

如果想获取远程服务器信息,如下:

# shows URLs of each remote server
$ git remote -v 

# gives more details about each
$ git remote show name 

也可以通过以下命令获取本地分支和远程分支的区别:

$ git diff master..john/master

也可以查看本地HEAD的修改:

$ git log remote/branch..
# Note: no final refspec after ..

6. 标签

git支持两种类型的标签:

  1. 一个指向某个提交的指针;

    $ git tag to-be-tested

  2. 一个指向标签对象的指针,其包含自身信息和历史。

    $ git tag -a v1.1.0 # Prompts for a tag message

7. 创建分支

$ git branch feature132
$ git checkout feature132

等价于:

$ git checkout -b feature132

8. 合并分支

$ git checkout master
$ git merge feature83 # Or...
$ git rebase feature83

合并分支分为merge和rebase两种方式:

  1. merge tries to resolve the changes and create a new commit that blends them.
  2. rebase tries to take your changes since you last diverged from the other branch and replay them from the HEAD of the other branch.

可以通过以下命令查看哪些分支包含独立的修改:

# Shows branches that are all merged in to your current branch
$ git branch --merged

# Shows branches that are not merged in to your current branch
$ git branch --no-merged

9. 远程分支

提交本地当前分支修改到远程服务器:

$ git push origin twitter-experiment:refs/heads/twitter-experiment
# Where origin is our server name and twitter-experiment is the branch

删除远程服务器的分支:

$ git push origin :twitter-experiment

查看所有远程分支的信息:

$ git remote show origin

待续......

[翻译]中级Git用户的25个使用技巧(上)