译者: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中的一切都以文件形式存储,举例:
- 每创建一次提交动作,git其实将创建一个文件(.git/refs),其中包含提交注释和相关信息(用户名,邮箱,时间,之前的提交等),并将其与一个树结构文件(.git/objects)关联。这个树结构文件包含对象列表。这些对象或块就是实际提交的修改内容。这些对象以SHA-1哈希命名。
- 在git中,branch,tags也是以文件存储(.git/refs/heads),其中存储的是指向当前提交的哈希值。
- 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支持两种类型的标签:
-
一个指向某个提交的指针;
$ git tag to-be-tested
-
一个指向标签对象的指针,其包含自身信息和历史。
$ 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两种方式:
- merge tries to resolve the changes and create a new commit that blends them.
- 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
待续......