Git指令使用情境筆記

最初的Git操作

最初的Git設定

安裝好git之後,最初的全域設定就下面這些,寫上名稱是為了之後commit和push使用,要帶入這個commit是誰修正的,而push是誰上傳到server的,如果git server認為不是合法使用者,可以拒絕該動作
git config --global user.name "yhchiu"
git config --global user.email "yhchiu@codingnot.blogger.com"
git config --global core.editor "vim"
git config --global color.ui true

你也可以在個別的git目錄(本地Repository)設定不同的使用者,上面的指令就不要加--global,而是--loacal
透過指令修改config之外,也可以直接些改設定檔,本機使用者的全域設定檔是在~/.gitconfig
而本地Repository則是紀錄在最上層目錄中的.gitconfig,設定當然是本地端的設定優先權較高

最初的使用情境

最初使用的兩種情境:
  1. 你想自己建立一個 Repository
  2. 你想用網路上提供的Repository URL 
針對第一種使用情境
mkdir
cd
git init
我們需要建立一個目錄,然後進入該目錄,初始化該目錄成為git repository
git init會在該目錄下建立.git的目錄存放git所需的資料


針對第二種使用情境
git clone
最後一個參數可以省略,如果省略的話,下載回來的目錄名稱就會跟url最後的目錄名稱一樣

最初在本地端嘗試修改

查看目前git的變更狀態,有新增,修改,移動,移除的檔案,以及staged等等狀態,好像很複雜一樣
git status

查看當前目錄與下層目錄的git變更狀態
git status ./ 

狀態分類

我將狀態分為commit狀態和file狀態:
  1. commit狀態分類staged, unstaged, untracked三種,第一個表示已準備加入commit,第二個表示尚未準備成為commit,以及尚未追蹤。
  2. file狀態new file, modified, renamed, deleted, 以及不會顯示的unmodified這五種,看名稱應該都不用解釋了吧!
情境1: 加入一個新的檔案
直接丟到你想放的位置,然後用git status就會看到它被歸類在untracked底下,會用紅色顯示該檔案,左邊會寫new file


情境2.1: 修改一個檔案
修改在git repository中的檔案,就直接開編輯器改改改,這時用git status就會看到它被歸類在unstaged,然後用紅色的顯示,左邊寫modified。

情境2.2: 修改一個新的檔案
也是直接就可以開編輯器改改改,這時候用git status,它會跟情境1一樣還是在untracked底下,因為對於git來說它就沒有在追蹤清單裡面阿!! 


情境3.1: 刪除一個檔案
刪除在git repository中的檔案,我建議使用git rm <刪除檔案路徑>,這時用git status就會看它被歸類在staged, 然後用綠色顯示,左邊寫deleted

如果你用了rm指令,它會被歸類在unstaged, 然後用紅色顯示並寫deleted

情境3.2: 刪除一個新的檔案
請使用一般的rm <刪除檔案路徑>就可以囉! 因為git 裡面根本沒有在追蹤新檔案!


情境4: 移動/改名一個檔案
使用git mv <準備移動的檔案路徑> <要的移動到的檔案路徑>

以上就是檔案修改修改的使用情境,有些操作同時會發生的file和commit的狀態改變,有些並不會


第一次產生提交(Commit)

要產生一個commit 首先就是要先修改一些檔案拉! 上一節提到的一些情境都能夠產生修改

如果你都沒有修改檔案,我們也無法產生一個commit,因為git不容許產生一個"空的"commit,你可以嘗試git commit -m "Test commit" 來看看錯誤訊息

有了修改檔案後要產生commit,必須將修改的檔案都加入追蹤清單,成為commit追蹤清單內的檔案後才能產生一個commit

這時會有人覺得幹嘛設定成這樣,直接修改就加入清單不是很好用嗎?

實際上我們在開發時會放許多debug訊息來輔助開發/除錯,如果修改檔案內容就直接加入commit追蹤清單,那我們多加的debug設置就會自動被帶入,在開發完準備產生commit時就會發現這樣很不方便,我還要特地的把這些自動加入的東西都自己挑揀掉才能產生正式的commit,所以git就是多一個commit追蹤清單,讓你選擇哪些變更需要加入。

如果你想偷懶的話,就在repository最上層目錄打
git add . 
一次性的把所有當前目錄以下的所有變更都加入commit的追蹤清單
(git add -A是比較正規的作法)

加入commit追蹤清單的檔案,commit狀態都會變成staged,然後用綠色顯示。

雖然如此,我們還是會有實際使用上的狀況發生:

情境1. 已加入了追蹤清單之後又想修改一個檔案
我很能理解這個狀況,不小心程式碼打錯了什麼,然後稍微review一下的時候,就需要修改!

修改後用git status的話,你會看到staged裡面有用綠色顯示該檔案,又在unstaged裡面用紅色顯示該檔案,

實際上它表示就是,你之前用git add加入清單的修改已經被納入追蹤清單,但是現在又有別的修改尚為加入,

如果再這之後沒有git add 該檔案的話,只有先前已加入的內容會被用來產生commit。

所以已經加入追蹤清單後又修改的檔案,就要再一次git add哦!

情境2. 追蹤清單內有加錯的檔案

在我們每次git status的時候就有提示該如何移除追蹤清單加錯的檔案
git reset HEAD <檔案路徑>

如果該檔案原本是untracked,就會回到用紅色顯示的untracked狀態
如果是已在git commit中的檔案,就會回到unstaged,並用紅色顯示修改過

簡單來說我們對程式碼變更都會保留,只是從staged變成unstaged/untracked。


情境3. 我還有檔案沒放進來追蹤清單

就回到上一個步驟,新增一個檔案到git,然後git add 該檔案就可以加到commit追蹤清單


最後,確定你想要的變更都加入追蹤清單之後,就可以產生commit了
git commit 
這時候就會開啟vim要求輸入commit的訊息,裡面會有git自動產生的一些訊息,不用編輯它唷! (編輯也沒用)


也可以直接在後面的參數輸出該commit的名稱
git commit -m "Commit description"


如果想要修改commit的內容
git commit --amend 
不過這指令還會作很多事情,不是很熟的話先不要用歐!


用 git log 就可以看到你所加入的commit哦!

留言