Git 基本筆記

前言

此篇心得筆記是由高見龍投影片閱讀而來

內容為對 Git 基本指令操作和認識

基本介紹

以下是幾個常用的線上編輯環境,你可以在上面部屬你想要的開發環境

更多的工具可以參考這裡

Codenvy

Codeanywhere

Cloud9

Koding

設定

Git 在操作時要先設定你的名稱和 email

之後你看 log 時才知道某個 commit 是誰送的

1
2
3
4
5
6
# 看目前設定
git config --list

# 設定你的名稱和 email
git config --global user.name "JasonChiuCC"
git config --global user.email "jasonchiucc@gmail.com"

除了用指令設定外你也可以建立 .gitconfig 來設定

此外也可以設定別名來取代較長的指令

1
2
3
4
5
6
7
8
[user]
email = jasonchiucc@gmail.com
name = JasonChiuCC

[alias]
co = checkout
br = branch
aa = add --all

基本操作

Git 狀態改變流程為

1
2
3
4
5
6
7
8
9
                     commit
+------------+
| |
| v
work Dir ---> Staging ----> Rep
| ^
| |
+------------+
add

基本常用指令

1
2
3
4
5
6
7
8
git init
git aa

# 可以將在 Staging 中的檔案移到一般狀態
git rm --cached filename
git status
git commit -m 'Message'
git log

修改指令

最後一次 commit 要新增/修改/刪除,就使用 –amend 參數

1
2
3
4
5
6
7
8
9
10
11
# 修改最後一次 commit 訊息
# 修改完之後按 ^x -> y -> Enter
git commit --amend

# 加入一個檔案到上一次 commit 中
git add filename
git commit --amend -m 'Add two file'

# 移除最後一次 commit 的檔案
git rm --cached filename
git commit --amend -m 'Add one file'

新增空白資料夾

Git 無法 commit 空白的資料夾

如果要 commit 空白資料夾,在資料夾中放入 .keep 或 .gitkeep 空白檔案

檢視歷史

以下是幾種不同顯示歷史紀錄的 alias

1
2
3
4
5
6
7
8
[alias]
lg = log --graph --oneline
lg1 = !"git lg1"
lg2 = log --graph --oneline --decorate --date=relative --all
lg3 = log --graph --abbrev-commit --decorate --date=relative --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)' --all
lg4 = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset)%C(bold yellow)%d%C(reset)%n'' %C(white)%s%C(reset) %C(dim white)- %an%C(reset)' --all
lg5 = log --graph --abbrev-commit --decorate --date=relative --all
lg6 = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) %C(bold yellow)%d %C(white)%s%C(reset)%n ' --all

檢視特定檔案紀錄

1
2
3
4
5
# 看某個檔案的歷史紀錄
git log -p filename

# 檔案中每一行是誰寫的
git blame filename

回復

如果檔案或工作目錄被改亂,想回復到最後 commit 的狀態

1
2
3
4
5
# 檔案回復到最後一次 commit
git checkout filename

# 工作目錄回復到最後一次 commit
git checkout .

取消 commit

有時候已經 commit 了,但是想取消最後一次 commit

等到改完之後再重新 commit

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 取消最後一次 commit,並會保留改變狀態
# 如果再按一次會再取消倒數第二次 commit !
git reset HEAD^

# 取消最後一次 commit,並不會保留改變狀態!(危險)
git reset HEAD^ --hard

# 移除任何在 unstaging 且修改的檔案(危險)
git clean -f

# 移除任何在 unstaging 且修改的資料夾(危險)
# 如果 A 資料夾之前已經 commit
# 目前只有在 A 資料夾中新增檔案
# 就只需要下 git clean -f 就好
git clean -df

分支指令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 新增分支
git branch car

# 刪除分支
git branch car -d

# 檢視分支
git branch

# 切換分支
git checkout car

# 切換分支(如果沒有分之就建一個)
git checkout -b car

合併分支

合併的流程是,拉別人過來

所以你要先切到主要的分支,然後再拉其他分之合併進來

通常開發分支合併到 master 後會刪除

1
2
3
4
5
6
7
8
9
10
11
12
git checkout master
git merge car
git branch car -d

# 如果 merge 時不要 Fast Forward 使用
git merge car --no--ff

# 檢視已經合併過的分支
git branch --merged

# 檢視還沒合併過的分支
git branch --no-merged

修改 commit(未完成)

1
git rebase

標籤

1
2
3
4
5
# 檢視標籤
git tag

# 新增標籤
git tag 1.0.0

遠端操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 檢視遠端設定
git remote -v

# 新增遠端網址
git remote add origin URL

# 刪除遠端節點
git remote rm origin

# 上傳
git push origin master

# 上傳 car 分支到 origin 節點
git push origin car

# 刪除遠端 car 分支
git push origin :car

# 下載(拉下來)
# pull = fetch + merge
git pull origin master

暫存

想把目前狀態存起來,先去處理其他事情

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 把目前狀態暫存起來
git stash

# 使用暫存的狀態
git stash apply

# 丟棄暫存的狀態
git stash drop

# 如果一值使用 git stash
# 會儲存在 stash@{0},stash@{1},stash@{2}...
# 數字越小越新
git stash show stash@{0}
git stash apply stash@{0}
git stash drop stash@{0}