<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # 查看提交歷史 在提交了若干更新之后,又或者克隆了某個項目,想回顧下提交歷史,可以使用?`git log`?命令查看。 接下來的例子會用我專門用于演示的 simplegit 項目,運行下面的命令獲取該項目源代碼: ~~~ git clone git://github.com/schacon/simplegit-progit.git ~~~ 然后在此項目中運行?`git log`,應該會看到下面的輸出: ~~~ $ git log commit ca82a6dff817ec66f44342007202690a93763949 Author: Scott Chacon <schacon@gee-mail.com> Date: Mon Mar 17 21:52:11 2008 -0700 changed the version number commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7 Author: Scott Chacon <schacon@gee-mail.com> Date: Sat Mar 15 16:40:33 2008 -0700 removed unnecessary test code commit a11bef06a3f659402fe7563abf99ad00de2209e6 Author: Scott Chacon <schacon@gee-mail.com> Date: Sat Mar 15 10:31:28 2008 -0700 first commit ~~~ 默認不用任何參數的話,`git log`?會按提交時間列出所有的更新,最近的更新排在最上面。看到了嗎,每次更新都有一個 SHA-1 校驗和、作者的名字和電子郵件地址、提交時間,最后縮進一個段落顯示提交說明。 `git log`?有許多選項可以幫助你搜尋感興趣的提交,接下來我們介紹些最常用的。 我們常用?`-p`?選項展開顯示每次提交的內容差異,用?`-2`?則僅顯示最近的兩次更新: ~~~ $ git log -p -2 commit ca82a6dff817ec66f44342007202690a93763949 Author: Scott Chacon <schacon@gee-mail.com> Date: Mon Mar 17 21:52:11 2008 -0700 changed the version number diff --git a/Rakefile b/Rakefile index a874b73..8f94139 100644 --- a/Rakefile +++ b/Rakefile @@ -5,5 +5,5 @@ require 'rake/gempackagetask' spec = Gem::Specification.new do |s| s.name = "simplegit" - s.version = "0.1.0" + s.version = "0.1.1" s.author = "Scott Chacon" s.email = "schacon@gee-mail.com commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7 Author: Scott Chacon <schacon@gee-mail.com> Date: Sat Mar 15 16:40:33 2008 -0700 removed unnecessary test code diff --git a/lib/simplegit.rb b/lib/simplegit.rb index a0a60ae..47c6340 100644 --- a/lib/simplegit.rb +++ b/lib/simplegit.rb @@ -18,8 +18,3 @@ class SimpleGit end end - -if $0 == __FILE__ - git = SimpleGit.new - puts git.show -end \ No newline at end of file ~~~ 該選項除了顯示基本信息之外,還在附帶了每次 commit 的變化。當進行代碼審查,或者快速瀏覽某個搭檔提交的 commit 的變化的時候,這個參數就非常有用了。 某些時候,單詞層面的對比,比行層面的對比,更加容易觀察。Git 提供了?`--word-diff`?選項。我們可以將其添加到?`git log -p`?命令的后面,從而獲取單詞層面上的對比。在程序代碼中進行單詞層面的對比常常是沒什么用的。不過當你需要在書籍、論文這種很大的文本文件上進行對比的時候,這個功能就顯出用武之地了。下面是一個簡單的例子: ~~~ $ git log -U1 --word-diff commit ca82a6dff817ec66f44342007202690a93763949 Author: Scott Chacon <schacon@gee-mail.com> Date: Mon Mar 17 21:52:11 2008 -0700 changed the version number diff --git a/Rakefile b/Rakefile index a874b73..8f94139 100644 --- a/Rakefile +++ b/Rakefile @@ -7,3 +7,3 @@ spec = Gem::Specification.new do |s| s.name = "simplegit" s.version = [-"0.1.0"-]{+"0.1.1"+} s.author = "Scott Chacon" ~~~ 如你所見,這里并沒有平常看到的添加行或者刪除行的信息。這里的對比顯示在行間。新增加的單詞被?`{+ +}`?括起來,被刪除的單詞被?`[- -]`?括起來。在進行單詞層面的對比的時候,你可能希望上下文( context )行數從默認的 3 行,減為 1 行,那么可以使用?`-U1`?選項。上面的例子中,我們就使用了這個選項。 另外,`git log`?還提供了許多摘要選項可以用,比如?`--stat`,僅顯示簡要的增改行數統計: ~~~ $ git log --stat commit ca82a6dff817ec66f44342007202690a93763949 Author: Scott Chacon <schacon@gee-mail.com> Date: Mon Mar 17 21:52:11 2008 -0700 changed the version number Rakefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7 Author: Scott Chacon <schacon@gee-mail.com> Date: Sat Mar 15 16:40:33 2008 -0700 removed unnecessary test code lib/simplegit.rb | 5 ----- 1 file changed, 5 deletions(-) commit a11bef06a3f659402fe7563abf99ad00de2209e6 Author: Scott Chacon <schacon@gee-mail.com> Date: Sat Mar 15 10:31:28 2008 -0700 first commit README | 6 ++++++ Rakefile | 23 +++++++++++++++++++++++ lib/simplegit.rb | 25 +++++++++++++++++++++++++ 3 files changed, 54 insertions(+) ~~~ 每個提交都列出了修改過的文件,以及其中添加和移除的行數,并在最后列出所有增減行數小計。 還有個常用的?`--pretty`?選項,可以指定使用完全不同于默認格式的方式展示提交歷史。比如用?`oneline`?將每個提交放在一行顯示,這在提交數很大時非常有用。另外還有?`short`,`full`?和?`fuller`?可以用,展示的信息或多或少有些不同,請自己動手實踐一下看看效果如何。 ~~~ $ git log --pretty=oneline ca82a6dff817ec66f44342007202690a93763949 changed the version number 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7 removed unnecessary test code a11bef06a3f659402fe7563abf99ad00de2209e6 first commit ~~~ 但最有意思的是?`format`,可以定制要顯示的記錄格式,這樣的輸出便于后期編程提取分析,像這樣: ~~~ $ git log --pretty=format:"%h - %an, %ar : %s" ca82a6d - Scott Chacon, 11 months ago : changed the version number 085bb3b - Scott Chacon, 11 months ago : removed unnecessary test code a11bef0 - Scott Chacon, 11 months ago : first commit ~~~ 表 2-1 列出了常用的格式占位符寫法及其代表的意義。 | 選項 | 說明 | | --- | --- | | %H | 提交對象(commit)的完整哈希字串 | | %h | 提交對象的簡短哈希字串 | | %T | 樹對象(tree)的完整哈希字串 | | %t | 樹對象的簡短哈希字串 | | %P | 父對象(parent)的完整哈希字串 | | %p | 父對象的簡短哈希字串 | | %an | 作者(author)的名字 | | %ae | 作者的電子郵件地址 | | %ad | 作者修訂日期(可以用 -date= 選項定制格式) | | %ar | 作者修訂日期,按多久以前的方式顯示 | | %cn | 提交者(committer)的名字 | | %ce | 提交者的電子郵件地址 | | %cd | 提交日期 | | %cr | 提交日期,按多久以前的方式顯示 | | %s | 提交說明 | 你一定奇怪*作者(author)*和*提交者(committer)*之間究竟有何差別,其實作者指的是實際作出修改的人,提交者指的是最后將此工作成果提交到倉庫的人。所以,當你為某個項目發布補丁,然后某個核心成員將你的補丁并入項目時,你就是作者,而那個核心成員就是提交者。我們會在第五章再詳細介紹兩者之間的細微差別。 用 oneline 或 format 時結合?`--graph`?選項,可以看到開頭多出一些 ASCII 字符串表示的簡單圖形,形象地展示了每個提交所在的分支及其分化衍合情況。在我們之前提到的 Grit 項目倉庫中可以看到: ~~~ $ git log --pretty=format:"%h %s" --graph * 2d3acf9 ignore errors from SIGCHLD on trap * 5e3ee11 Merge branch 'master' of git://github.com/dustin/grit |\ | * 420eac9 Added a method for getting the current branch. * | 30e367c timeout code and tests * | 5a09431 add timeout protection to grit * | e1193f8 support for heads with slashes in them |/ * d6016bc require time for xmlschema * 11d191e Merge branch 'defunkt' into local ~~~ 以上只是簡單介紹了一些?`git log`?命令支持的選項。表 2-2 還列出了一些其他常用的選項及其釋義。 | 選項 | 說明 | | --- | --- | | -p | 按補丁格式顯示每個更新之間的差異。 | | --word-diff | 按 word diff 格式顯示差異。 | | --stat | 顯示每次更新的文件修改統計信息。 | | --shortstat | 只顯示 --stat 中最后的行數修改添加移除統計。 | | --name-only | 僅在提交信息后顯示已修改的文件清單。 | | --name-status | 顯示新增、修改、刪除的文件清單。 | | --abbrev-commit | 僅顯示 SHA-1 的前幾個字符,而非所有的 40 個字符。 | | --relative-date | 使用較短的相對時間顯示(比如,“2 weeks ago”)。 | | --graph | 顯示 ASCII 圖形表示的分支合并歷史。 | | --pretty | 使用其他格式顯示歷史提交信息。可用的選項包括 oneline,short,full,fuller 和 format(后跟指定格式)。 | | --oneline | `--pretty=oneline --abbrev-commit`?的簡化用法。 | ## 限制輸出長度 除了定制輸出格式的選項之外,`git log`?還有許多非常實用的限制輸出長度的選項,也就是只輸出部分提交信息。之前我們已經看到過?`-2`?了,它只顯示最近的兩條提交,實際上,這是?`-<n>`?選項的寫法,其中的?`n`?可以是任何自然數,表示僅顯示最近的若干條提交。不過實踐中我們是不太用這個選項的,Git 在輸出所有提交時會自動調用分頁程序(less),要看更早的更新只需翻到下頁即可。 另外還有按照時間作限制的選項,比如?`--since`?和?`--until`。下面的命令列出所有最近兩周內的提交: ~~~ $ git log --since=2.weeks ~~~ 你可以給出各種時間格式,比如說具體的某一天(“2008-01-15”),或者是多久以前(“2 years 1 day 3 minutes ago”)。 還可以給出若干搜索條件,列出符合的提交。用?`--author`?選項顯示指定作者的提交,用?`--grep`?選項搜索提交說明中的關鍵字。(請注意,如果要得到同時滿足這兩個選項搜索條件的提交,就必須用?`--all-match`?選項。否則,滿足任意一個條件的提交都會被匹配出來) 另一個真正實用的`git log`選項是路徑(path),如果只關心某些文件或者目錄的歷史提交,可以在?`git log`?選項的最后指定它們的路徑。因為是放在最后位置上的選項,所以用兩個短劃線(`--`)隔開之前的選項和后面限定的路徑名。 表 2-3 還列出了其他常用的類似選項。 | 選項 | 說明 | | --- | --- | | -(n) | 僅顯示最近的 n 條提交 | | --since, --after | 僅顯示指定時間之后的提交。 | | --until, --before | 僅顯示指定時間之前的提交。 | | --author | 僅顯示指定作者相關的提交。 | | --committer | 僅顯示指定提交者相關的提交。 | 來看一個實際的例子,如果要查看 Git 倉庫中,2008 年 10 月期間,Junio Hamano 提交的但未合并的測試腳本(位于項目的 t/ 目錄下的文件),可以用下面的查詢命令: ~~~ $ git log --pretty="%h - %s" --author=gitster --since="2008-10-01" \ --before="2008-11-01" --no-merges -- t/ 5610e3b - Fix testcase failure when extended attribute acd3b9e - Enhance hold_lock_file_for_{update,append}() f563754 - demonstrate breakage of detached checkout wi d1a43f2 - reset --hard/read-tree --reset -u: remove un 51a94af - Fix "checkout --track -b newbranch" on detac b0ad11e - pull: allow "git pull origin $something:$cur ~~~ Git 項目有 20,000 多條提交,但我們給出搜索選項后,僅列出了其中滿足條件的 6 條。 ## 使用圖形化工具查閱提交歷史 有時候圖形化工具更容易展示歷史提交的變化,隨 Git 一同發布的 gitk 就是這樣一種工具。它是用 Tcl/Tk 寫成的,基本上相當于?`git log`?命令的可視化版本,凡是?`git log`?可以用的選項也都能用在 gitk 上。在項目工作目錄中輸入 gitk 命令后,就會啟動圖 2-2 所示的界面。 ![](http://git-scm.com/figures/18333fig0202-tn.png) 圖 2-2\. gitk 的圖形界面 上半個窗口顯示的是歷次提交的分支祖先圖譜,下半個窗口顯示當前點選的提交對應的具體差異。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看