﻿# 使用 SourceTree 查看 Git 版本線圖 (Graph) 的注意事項

上週在設計 Git 練習題目時，意外發現一個看似 [SourceTree](http://www.sourcetreeapp.com/) 這套 Git 版控工具的問題 (Bug)，就是在開啟一些特定 Git 版本庫的時候，其版本線圖 (Graph) 會整個大亂，非常奇怪。我後來到官網論壇發問後才得到答案，原來有個小地方需要注意，各位有在用 [SourceTree](http://www.sourcetreeapp.com/) 的人應該也要注意一下。

我在 GitHub 有設立一個小專案，用來描述這個問題，請依照下列步驟重現問題：

1.  先複製 (Clone) 這個範例專案下來  
    **git clone** **https://github.com/doggy8088/SourceTree\_Odd\_Graph\_Demo**
2.  試圖取出 branch1 分支  
    **git checkout branch1**
3.  加入此工作目錄到 SourceTree 程式裡，然後點選 master 分支

此時你會看到這個 **master** 分支的版本線圖全亂了，它變成一個孤兒的分支，實在太奇怪了！

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/ec8312079909ad9f9195-image_2389.png)

  
我如果用 [TortoiseGit](https://code.google.com/p/tortoisegit/) 的 **Show log** 功能查看線圖，則完全沒問題！

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/04a7a3d60db02e022c88-image_2390.png)

後來終於發現，原來是 [SourceTree](http://www.sourcetreeapp.com/) 在顯示線圖時，預設排序為 **Date Order** ( 以提交時間做排序 )

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/41368d6c636ce1dd3a72-image_2391.png)

只要調整為 **Ancestor Order** ( 以各版本祖先的順位做排序 ) 就完全解決了！

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/6117a617702f818c40ef-image_2392.png)

其實 **Ancestor Order** 才是原本 Git 顯示圖形時該使用的排序方式，因為 Git 支援修改版本的機制，例如透過 Rebase (重新指定基礎版本位置) 就可以修改版本的順序，自然也不會照著提的順序顯示版本，圖形自然也畫不出來！

我認為唯一使用 **Date Order** ( 以提交時間做排序 ) 的時間，是當開發人員單純想看提交的時間順序時才有用，只是這時的版本線圖就不一定準確了，這點要特別小心。

**相關連結**

-   [Free Mercurial and Git Client for Windows and Mac | Atlassian SourceTree](http://www.sourcetreeapp.com/)
