Git Basics & Common Commands
06 May 2020Basics
Git為分散型版控工具,不需要伺服器端就可以運作。
只記錄版本間不一樣的地方,例如:index.html兩次修改後的增加BBB、增加CCC。
Git可分為三大區塊:Working Directory 工作目錄、Staging Area 暫存區域、Repository 儲存庫,Git指令在三大區塊間移動檔案。
安裝Git
紀錄程式學習歷程,使用工具為MacBook Pro。
打開terminal,輸入下列指令安裝Homebrew:
/bin/bash -c "$(curl -fsSL
https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
輸入下列指令,使用Homebrew安裝git:brew install git
確認git安裝路徑及版本:
which git # /usr/local/bin/git
git --version # git version 2.25.0
- /usr/local對Finder預設隱藏,想要開啟的話,打開一個Finder,按下command+shift+G,在彈出的目錄輸入/usr/local就可以找到
開始使用
terminal先進入想要版控的目錄,宣告要進行版控git init
查詢當下所在的目錄內容,可使用下列三種方式:
- ls:顯示當下的目錄及檔案
- ls -a:顯示當下的目錄的所有目錄及檔案,包括隐藏的.和..等
- ls -al:顯示當下的目錄的所有目錄及檔案,包括隐藏的.和..等,並顯示詳細訊息,包括大小、屬性,建立時間
ls # hello.rb
ls -a # . .. .git hello.rb
ls -al
# drwxr-xr-x 4 username staff 4 Mar 12:40 .
# drwxr-xr-x@ 8 username staff 4 Mar 12:36 ..
# drwxr-xr-x 10 username staff 4 Mar 14:02 .git
# -rw-r--r--@ 1 username staff 4 Mar 17:19 hello.rb
directory, d代表目錄; - 代表檔案,後面的九個字母要三個三個分別看
第一組 | 第二組 | 第三組 |
---|---|---|
user | group | others |
rwx | r-x | rwx |
使用者可讀可寫可執行 | 群組可讀不可寫可執行 | 其他人可讀可寫可執行 |
- read, r 可讀
- write, w 可寫入
- execute, x 可執行
- ”-“ 無法使用該功能
如何修改權限 chmod (change mode)
方法一:二進位
ls -al # -rw-r--r-- index.html
chmod 700 index.html
ls -al # -rwx------ index.html
方法二:直接指定user, group or others
chmod g+x index.html
ls -al # -rwx--x--- index.html
Common Commands
touch
:建立檔案git add
:從工作目錄移到暫存區域git commit
:從暫存區域移到本地儲存庫- 對已經存在Repository的檔案,在還沒add的狀況下加-a,
git commit -a -m "<context>"
- 對已經存在Repository的檔案,在還沒add的狀況下加-a,
touch index.html # 建立index.html
git add index.html # index.html移至暫存區
git commit -m "add index.html" # index.html移至儲存庫,並備註add index.html
git log
:檢視git紀錄- 另外加上
--oneline
與--graph
,可以看到不一樣的格式輸出 git log -p <path>
可以檢視該路徑的紀錄
- 另外加上
git status
:查看目前狀態rm
;git rm
:從工作目錄刪除檔案--cached
不會從工作目錄刪除檔案,僅讓檔案不受Git管控
rm index.html # 刪除index.html
git add index.html # 將此次的變化移至暫存區(刪除index.html)
git commit -m "delete index.html" # 將此次的變化移至儲存庫
---
git rm index.html # 刪除index.html,並將此次的變化移至暫存區
git commit -m "delete index.html" # 將此次的變化移至儲存庫
---
git rm index.html --cached # 讓index.html不再受Git管控
mv
;git mv
:變更檔案名稱
mv index.html hello.html # index.html更名為hello.html
---
git mv index.html hello.html # index.html更名為hello.html,並將此次的變化移至暫存區
- 修改git紀錄
git commit --amend -m
修改最後一次commit紀錄git reset
拆掉commit,再重新commit--mixed
,--soft
,--hard
git commit --amend -m "Hello, world" # 最後一次commit訊息改成Hello, world
git reset e19f41a # 回復至e19f41a的狀態
git reset e19f41a^ # 回復至e19f41a前一次的狀態
git reset e19f41a^^^ # 回復至e19f41a前三次的狀態
# 假設HEAD & master目前在e19f41a,也可改寫成下列:
git reset HEAD^
git reset master^
符號 | 英文 | 中文 | 使用 | 意義 |
---|---|---|---|---|
~ | Tilda | 取代符號 | HEAD~; HEAD~2 | 回到前一次;回到前兩次 |
^ | Caret | 插入號 | HEAD^; HEAD^^ | 同上 |
git reset --mixed # commit拆出的檔案會移至工作目錄
git reset --soft # commit拆出的檔案會移至暫存區
git reset --hard # commit拆出的檔案會丟掉
Type | mixed (default) | soft | hard |
---|---|---|---|
commit移出的檔案 | 回工作目錄 | 回暫存區 | 丟掉 |
git checkout
:切換分支或復原檔案
git checkout mouse # 切換至mouse分支
---
git checkout index.html # 復原index.html
---
git checkout HEAD~ # 回復至一個版本以前的檔案,覆蓋工作目錄的檔案,並更新暫存區
git checkout HEAD~2 # 回復至兩個版本以前的檔案,覆蓋工作目錄的檔案,並更新暫存區
git blame
:查看檔案每一行code歷史紀錄- -L:只顯示指定行數的紀錄
git blame index.html # 顯示index.html每一行紀錄
---
git blame -L 3,8 index.html # 顯示index.html 5~8行紀錄
git reflog
;git log -g
:查看HEAD移動紀錄
git reflog # 查看HEAD移動紀錄
git log -g # 查看HEAD移動紀錄
git branch
:新增分支- -m 修改分支名稱
- -d 刪除分支
git branch cat # 新增cat branch
git branch -m cat dog # cat更名為dog
git branch cat e12k45 # 到commit'e12k45'新增cat分支
git checkout -b cat e12k45 # 到commit'e12k45'新增cat分支,HEAD移動至cat分支
---
git branch -d hello # 刪除hello分支
git merge
:合併分支
git checkout master # 切換至master branch
git merge cat # master合併car branch
git rebase
:合併分支
# 有cat, bird兩個分支,都源自於master分支
git rebase bird # 剪下bird分支,接上cat分支