GYWANG | Git 指令列筆記

本筆記是GYWANG整理平常在使用git指令列操作時常用的指令,給習慣使用指令列的朋友當作翻閱的筆記,或是給予想要學習使用指令列的朋友們對常用語法有基本的認識 ~ ~

git logo

git init

初始化數據庫(repository),對要上git的目錄下這個指令,讓此目錄底下的內容連上git
git init

git add

將所選的資料加入索引
git add
git add a.py # 只加入a.py這個檔案進索引
git add . # 加入該目錄底下的所有檔案進索引

git commit

將放在索引的檔案提交成一個新版本的commit
git commit 
git commit -m "加入a.py" # 將在索引內的檔案commit出去,且寫下註解 "加入a.py"

git 檔案追蹤機制

圖片來源: W3HexSchool
git檔案追蹤機制

git branch

查看目前有哪些分支
git branch

git branch <分支名稱>

新增分支
git branch develop

git checkout <分支名稱>

切換分支名稱
git checkout master
git checkout develop

git status

查看目前該分支內add、commit的狀況
git status

git log

查看版本紀錄
git log

git remote add <網址>

將本地端知道要跟哪一個遠端的repository相通
git remote add https://github.com/110407SchoolProject/backend.git

git push <數據庫簡稱> <分支名稱>

將commit的紀錄從本地端推送到遠端
git push origin master

git pull

從遠端下載更新的檔案(不是整個Repository)
git pull

git clone <複製的網址>

將需要的數據庫(Repository)下載下來
git clone https://github.com/110407SchoolProject/backend.git

git merge <分支名稱>

圖片來源: W3HexSchool
git merge1
如上圖,當有兩條分支的時候,分支dev比master分支快兩個commit,此時,分支master想要合併(merge)到跟develop同一個commit位置,就可以在分支master下 “git merge dev”,意思就是說分支master想要跟dev合併,完成後,兩條分支的commit進度就相同如下圖。
git merge2
圖片來源: W3HexSchool
git merge dev

git 分支合併 快轉模式(fast-forward)

git fastforward1
圖一,分支master目前位置C2( commit兩次),此時,產生一條新的分支叫做dev
git fastforward2
圖二,分支dev到C4的位置(新增兩個commit),master則維持在原本的C2位置。
git fastforward3
圖三,現在,分支dev比master快兩次的commit紀錄,master想要合併到跟dev同樣的commit紀錄。然而,因為master在分支dev做了兩次的commit之後沒有再做任何的commit紀錄,依舊停留在原本產生分支dev的C2位置,所以當現在master想要合併dev的紀錄時,就會觸發快轉模式 (fast forward)

git 分支合併 非快轉模式(non-fast-forward)

圖片來源: W3HexSchool

git non fastforward
圖一,與上方快轉模式不同的點在於,當分支dev的commit到C4的位置時,master並非沒有動作,反而新增了一個或以上的commit,此時從圖一上可以看出目前master是指向C5的位置。

圖片來源: W3HexSchool

git non fastforward2
圖二,所以現在當master想要跟分支dev合併以取得dev的C3、C4紀錄時,就會觸發非快轉模式,最後master會產生出一個新的C6位置。
註: master有6個commit資料,分支dev則只有C1到C4的commit資料,如想要分支dev也同步到C6,切換到分支dev下指令git merge master 即可。

參考文獻

六角學院W3HexSchool
divider2 5 scaled