Git 學習筆記


這裡記錄透過Git command line操作Git的筆記。



  1. 安裝Git

首先安裝了Git 程式,安裝好後主要是可以在command line上透過指令執行Git相關工作項目。
安裝完成後可以透過git --version看是否有安裝成功。


  2. Git相關設定

在Git每次版本提交版本時,都可以注意到提交的列表上會顯示提交者的姓名與email,所以一開始要先設定這些資訊,設定的資訊會寫至.gitconfig檔案內,有幾種方式可以設定:

  1. 透過以下指令來設定當前使用者資訊
git config --global user.name Joseph

git config --global user.email google@gmail.com


     2.  透過指令直接開啟編輯器,修改相關屬性設定:

git config --global -e


這時會以command line上的編輯器打開設定檔,可以找到user.name與user.email屬性,可以直接修改並儲存即可。

    3.  修改.gitconfig檔,通常可以在使用者帳號的$HOME目錄下找到,開啟後編輯即可。

如果是透果指令git config --global user.name Name的方式修改,如果重複執行多次,會發現user.name會出現多筆紀錄,系統預設會以最後一個設定的user.name為主。
或是透過

git config --global --unset-all user.name

將user.name所有值清除掉,再重新設定。 最後可以透過
git config --list
指令查看所有系統上git所有可以設定的值,藉此確認各項設定在系統上所抓取到的內容。


   3. 在本機建立Repository

只要command line切換到指定目錄,接著輸入

git init

就會在資料夾上建立.git檔,建立本機上的Repository,可用來記錄該Repo上的所有狀態。

如果是要將Github上的專案抓下來到本機,可以透過以下指令將專案抓下來,首先在Github上找到clone or download,點選後選擇 use https並且複製連結,再透過以下指令即可:

git clone 連結url

   4. 提交相關指令

1. 新增檔案

所有在git目錄下建立或修改的檔案,都必須先將檔案加入Git索引檔內,表示該檔案要提交,可透過下列指令來將檔案加到索引檔內:

git add .    //將所有新增的檔案加入索引

git add filename   //只加入特定檔案至索引 

新增完成後可以透過以下指令查詢當前git目錄的狀態:

git status



可以從這邊看見當前是在哪一個branch,還有哪些檔案新增到了git 索引中,哪些檔案是還沒加入的,如果有尚未被加入至索引的檔案,畫面會以紅字來顯示。


2. 檔案提交

git commit -m "註解"  //提交所有檔案
git commit -m "註解" path/file   //提交path下file檔,一次只commit一個檔案

提交前一定要將檔案先add過後,才可以執行commit指令。提交後要查看是否成功等資訊,可以透過下列指令查看

git log

該指令可以看見Repo上檔案提交的歷程,包含時間、提交者還有註解等資訊。

3. 提交時要忽略之檔案

有些檔案是不希望加入Git追蹤的,像是有些程式compile完後可能會產生一些cache檔,java compile完後的class檔,或是各台電腦上的獨自設定等等檔案,可能不希望將這類檔案加入版本管控中,這類檔案可以在git中設定為忽略的檔案,只要在git目錄下新增.gitignore檔,在檔案中以下列方式指定要忽略的檔案類型:

a. test.html  //將test.html檔忽略掉

b. *.html     //忽略所有副檔名為html的檔案

c. web/        //忽略web 資料夾下所有檔案

另外個程式語言的.gitignore檔範本,可參考gitignore設定

4. 送交檔案到遠端Repo

在自己電腦本機調整完資料,在commit後可以將修改的部分同步到遠端Repo,只要透過下列指令即可已完成:

git push

    5. 取消追蹤、取消commit

如果有誤將檔案加入git索引追蹤,或是將檔案commit後想要取消,可以透過以下指令取消剛剛所提交的動作

git reset HEAD   //將當前git目錄還原到HEAD狀態,表示剛剛所提交的add與commit
//等動作都會被取消掉
git reset file   //取消指定file的動作

這些指令只會取消當前的commit,並不會還原檔案。


原先目錄中有一個修改過的檔案與新增的檔案,透過git reset後,只會將所提交的動作取消,並不會還原修改的內容,在執行git reset HEAD後的狀態會為

透過git status可以看見會提示有些檔案還未提交,有些檔案尚未被加入索引。


如果是檔案改壞了,要還原檔案至最後一次提交狀態,可以透過以下指令

git checkout fileName   //將指定檔案還原到最後一次commit的狀態,還原檔案
git reset --hard        //將整個工作目錄還原到最後一次commit的狀態,還原所有檔案與目錄


如果今天git status狀態如上圖,執行 git reset --hard,會將目錄還原到上次commit狀態,執行結果如下圖:

可以看見執行git reset --hard後,工作目錄上所有新增修改的東西都沒有了,目錄當前狀態變成最後一次commit的狀態。


6.  Branch 

Git專案可以有許多不同的Branch,如果有要調整部分功能,或是新增新功能時,通常會切出一個新的branch來開發,待完成後才跟master合併,可以透過以下指令得知目前Git目錄所切換的branch資訊。

git branch

該指令會顯示目前所處的branch名稱,branch名稱前面如果有*表示當前所在的branch。

新增branch指令:


git branch newBranchName    //新增newBranchName分支


這時再透過git branch指令來看,就可看見當前有兩個分支,但*還是在master前,表示新建分支後,Git工作目錄仍處於master上。


切換branch:

git checkout branchName

透過git checkout feature1切換後,再透過git branch指令查看,就可以看見*在feature1 branch上,新增一個新的branch,就是從當下的commit點複製一份出來(比較像是複製),在feature1上對檔案進行任何操作,都不會影響到master分支上的程式。


合併branch:

git merge branchName


執行該指令,會將當前所在的branch與所指定的branch合併,將所指定的branch合併至當前的branch,預設是使用fast-forward模式合併。

HEAD切換:

在過程中,都有一個HEAD變數指向當前目錄上Git是位於哪個commit點上,Git上的commit點切換,其實就是將HEAD點擺在不同的commit點上,切換branch也是,只是將HEAD擺到不同branch上的某一個commit點。我們也可以透過將HEAD將工作目錄內容指向之前的commit點,藉此看先前commit時工作環境的狀態與內容。

要將Git目錄切換到先前commit的時間點,可以透過下列指令來切換

git checkout commit Id前四碼|master

在切換後,Git會將整個工作目錄還原到當時在commit時,Git目錄的狀態,所有檔案都會被還原至當時的狀態。




沒有留言:

張貼留言

Java Spring Framework 筆記 - Autowiring (2)

這篇記錄透過 Annotation來做到 Spring的 autowiring。