【翻譯】git教程(git tutorial)【二】

繼續上次的教程,這篇博客使用MarkDown編輯器編寫。

探索歷史

Git歷史被展現爲一系列相關聯的提交。我們已經查看過使用git log命令能列出這些提交。注意每個git日誌的第一行都給出了提交的名稱:
$git log
commit 3893e06fea5321867dd8af4140ced494012b8993
Author: mengyi <[email protected]>

我們能將這個名字給git show,用於查看這次提交的詳情:

$git show 3893e06fea5321867dd8af4140ced494012b8993

但是這裏還有其他的方式查看這次提交,你可以只使用名稱的前幾個字符,只要能獨立標識這次提交就可以了:

$git show 3893e06fea5  #名稱開始的幾個字符
$git show HEAD         #當前分支的tip
$git show experimental #“experimental”分支的tip

每次提交通常有一個父(parent)提交,指出項目以前的工作狀態:

$git show HEAD^     #查看HEAD的父(parent)提交
$git show HEAD^^    #查看HEAD的祖父(grandparent)提交
$git show HEAD~4    #查看HEAD的曾祖輩(great-great grandparent)提交

注意:合併提交的可能有超過一個父提交

$git show HEAD^1    #顯示第一個父輩提交(和HEAD^相同)
$git show HEAD^2   #顯示第二個父輩提交

在運行如下命令後,你也能自己命名提交:

$git tag v2.5 1b2e1d63ff

你就能通過“v2.5”這個名字來查看 ”1b2e1d63ff“,如果你打算把這個名字和其他人分享(比如說,標識一個項目的發佈版本),你應該創建一個“tag”對象,可能還要對其簽名,查看git-tag獲取更多詳情。
任何需要知道提交對象的git命令,都能使用這些名字,例如:

$git diff v2.5 HEAD        #將當前HEAD和v2.5的HEAD進行比較
$git branch statble v2.5 #開始一個名字是“stable”的新分支
$git reset --hard HEAD^   #重設你當前的分支和工作目錄到HEAD^的狀態

請注意最後一個命令:它將從這個分支中刪除所有HEAD^之後的提交,另外丟失了這個工作目錄中的任何修改。如果這個分支是這些提交的唯一分支,那麼這些提交都將丟失。同時,不要在公共可見分支中使用git reset命令,因爲它將在其他開發者清理歷史的時候強制產生不必要的合併。如果你需要撤銷你所做的修改,使用git revert
git grep命令能夠在你任何版本的項目中搜索對應的字符,例如:

$git grep "hello" v2.5

在v2.5的所有事件中搜索“hello”
如果你沒有輸入提交的名稱,git grep將在你當前的文件夾中搜索所有git管理的文件,例如:

$git grep "hello"

這是一個快捷的方式去搜索僅僅被git跟蹤的文件。
很多git命令也接受一組能被多種方式指定的提交,這裏用git log來舉例:

$git log v2.5..v2.6     #顯示v2.5和v2.6之間提交的log
$git log v2.5          #顯示v2.5以後的提交
$git log --since="2 weeks ago" #顯示最近兩週的提交
$git log v2.5.. Makefile  #顯示從v2.5以後修改了Makefile的提交

你也能給git log一個提交的範圍,其中第一個不一定是第二個的祖輩;例如,“stable”和“master”是一段時間以前從一個公共提交分出來的,然後執行:

$git log stable..master

將列出“master”分支的提交但是並沒有“stable”分支的提交,然而:

$git log master..stable

將顯示“stable”分支的提交但並沒有“master”分支的提交
git log有一個缺點:它必須以列表的形式展現提交,當歷史中有很多開始分支然後又合並回來的開發線,git log展現的這些提交就顯得沒有意義。
很多擁有很多開發者的項目會有頻繁的合併,gitk在顯示他們歷史方面做得更好,例如:

$gitk --since="2 weeks ago" drivers/

它允許你在“drivers”目錄下搜索近2周以來所有的修改文件的提交。(注意:你能通過按住控制鍵的同時按“-”或“+”來調整gitk的字體)
最後,大部分接受文件名的命令允許你在文件名前加上提交名,爲這個文件指定特定的版本:

$git diff v2.5:Makefile HEAD:Makefile.in

你也能使用git show去查看任意這樣的文件:

$git show v2.5:Makefile

下一步

這個教程應該足以爲你的項目進行基本的版本分佈管理控制。然而爲了完全理解git的深度和強大,你需要理解它基於的兩個基本的概念:

  • 這個對象數據庫是用來存儲你項目文件、目錄和提交的歷史的優雅的系統
  • 索引(index)文件是目錄樹種狀態的緩存,用於創建提交,檢出工作目錄,將不同的樹進行合併。

本教程的這兩個部分解釋了對象數據庫,素銀文件,和其他一些你將在大多數git中需要的奇怪的東西。你能在gittutorial-2中找到他們。
如果你現在立馬不想繼續下去,這裏有些你感興趣的離題的東西:

  • git-format-patch,git-am:他們將一系列的git提交轉換成電子郵件補丁,對於Linux Kernel這類重度依賴於郵件補丁的項目十分有用。
  • git-bisect: 當你的項目中有迴歸,一種跟蹤bug的方法是通過搜索歷史,查找錯誤的確切的提交。git bisect能夠幫助你爲那個提交執行二進制搜索。
  • gitworkflows:給出推薦工作流的概述
  • everyday GIT with 20 Commands Or So
  • gitcv-migration:爲CVS用戶的git

參見

titutorial-2 gitcvs-migration gitcore-tutorial gitglossary git-help gitworkflows Everyday git The Git User’s Manual

GIT

git套件的一部分

備註

  1. Git用戶手冊
    file:///usr/share/doc/git-1.7.1/user-manual.html
  2. 每天20個GIT命令
    file:///usr/share/doc/git-1.7.1/everyday.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章