﻿# GitHub for Windows 內建 Git Shell 執行時顏色所代表的意義

在使用指令列版控的過程中，經常有機會用到 Git Shell 這套優異的 Git 版控環境，一來他使用 Windows PowerShell 為核心，其訊息顯示與輸入都支援 Unicode，比較不會有中文字集轉換的問題；二來輸入命令或分支名稱的時候還有 IntelliSense 功能協助，非常貼心的設計；三來在版控的過程中，可以看出當下工作目錄位於哪個分支上，這個提示也很棒；四來常會看到他透過顏色與一些特殊符號提示你目前工作目錄的狀態，但不特別看文件還真的不太容易知道它顏色代表的意義，因此特別撰文解說。

**不同的分支顏色所代表的意義**

-   **青色 (Cyan)**，代表**本地儲存庫**與**遠端儲存庫**是同步狀態！  
    ![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/6400c72f1f1496fe7cf7-image_2367.png)  
    
-   **紅色 (Red)**，代表目前**本地儲存庫**的版本比**遠端儲存庫**還落後 (behind)，意思是**遠端儲存庫**擁有目前**本地儲存庫**沒有的版本，需要透過 **git pull** 把**遠端儲存庫**的變更抓回來更新**本地儲存庫**！  
    如下圖示，代表目前遠端儲存庫上有 1 個版本 (commit) 需要同步回來：  
    ![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/2644bb092ff936efbc85-image_2368.png)  
    
-   **黃色 (Yellow)**，代表目前**本地儲存庫**有些版本比**遠端儲存庫**還**落後** (behind)，同時間也有些版本比**遠端儲存庫**還超前 (ahead)，意思是說，目前**遠端儲存庫**擁有目前**本地儲存庫**沒有的版本，而且**本地儲存庫**也擁有**遠端儲存庫**沒有的版本，代表你需要先做 **git pull** 把**遠端儲存庫**的變更抓回來更新**本地儲存庫**，也需要透過 **git push** 把**本地儲存庫**的版本變更推送上去。**注意**：由於**遠端**與**本地**都有版本變更，這代表透過 **git pull** 抓取變更回來時，勢必要面對「合併」的議題，也就是可能會遇見「合併衝突」的狀況。  
    ![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/a2e53b9056b457ee0736-image_2369.png)  
    
-   **綠色 (Green)**，代表目前**本地儲存庫**有些版本比**遠端儲存庫**還**超前** (aheads)，意思是說**本地儲存庫**擁有**遠端儲存庫**沒有的版本，你需要透過 **git push** 把本地變更推送到遠端儲存庫。  
    如下圖示，當我們先用 **git pull** 把遠端儲存庫的變更抓回來合併或更新之後，顏色馬上變成「**綠色**」了，也就是這個時候執行 **git push** 是最安全的（不會有衝突事件發生），你可以這樣思考：【**當看到綠燈的時候，就是可以推送版本上去的時刻！**】  
    ![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/d5ad7edbff31f61fe230-image_2370.png)  
      
    如下圖，你可以發現，只要我把本地儲存庫的變更推送上去後，顏色就立刻變回**青色 (Cyan)**了！  
    ![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/9fe2c8d6c62151307ad2-image_2371.png)

**工作目錄檔案狀態符號與顏色所代表的意義**

在 Git Shell 執行環境中，經常出現的一些有顏色的數字提示，其數字前的**符號**所代表的意義如下：

-   `**+**` = 有 n 個新增檔案
-   `**~**` = 有 n 個檔案被更新
-   `**-**` = 有 n 個檔案被刪除
-   `**!**` = 有 n 個檔案在合併的時候發生衝突

其顏色所代表的意義如下：

-   暗紅色 (Dark Red)，代表這些檔案處於 Untracked 或 Not Staged 狀態 (不會被 commit 的檔案)
-   暗綠色 (Dark Green)，代表這些檔案處於 Staged 狀態 (會被 commit 的檔案數

以下圖示各位可以看圖說故事一番：

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

**相關連結**

-   [dahlbyk/posh-git](https://github.com/dahlbyk/posh-git/) - A PowerShell environment for Git
