[CLI] Git 指令
- CS Visualized: Useful Git Commands @ dev:用圖示的方式清楚說明 git cli 不同指令所做的事
- help @ Github
[TOC]
常用指令
git checkout . # 編輯檔案後,恢復目錄到最後一次的 commit 狀態
git checkout [FileName] # 把某支修改過的檔案還原到未修改狀態 commit 後修改的檔案內容移除
git reset HEAD [filename] # 取消已經被 add 加入索引的檔案(不會改變檔案內容)
git reset HEAD~1 # 取消最後一次提交的 commit ,檔案內容回到 unstaged 狀態(已編輯的內容會被保留),等同於 reset HEAD^
git reset HEAD~1 --hard # 取消最後一次提交的 commit ,檔案內容回到 unstaged 狀態(已編輯的內容不會被保留)
git reset --hard ORIG_HEAD # 將不小心透過上行指令刪除的 commit 復原
# 將 local 的 branch 對齊回 remote 的 branch 的 commits
git fetch && git reset --hard @{u}
##
# 合併分支
##
git rebase [some-hash]^ --onto [some-branch]
git merge --squash [some-branch]
##
# git commit
##
git commit --amend # 修改當前 commit 撰寫內容,ESC :wq 可離開 amend
git commit --amend -m "[message]" # 將新的 commit 合併到上一次的 commit 中(上一次的 commit 的內容會被覆蓋)
git commit --amend --no-edit # 修改當前 commit 但不修改 commit message
git commit --no-verify # 去掉 commit 前一些 lint 的檢查
##
# 刪除遠端分支
##
git push origin :[branch-name] # ":" 表示要刪除遠端 branch 的意思
git push origin --delete [branch-name] # 同上
git fetch -p origin # 刪除 br 內不存在的參考遠端分支
# 將和該次 push 有關的 tags 一起推上去
git push --follow-tags origin main
# 建立一個新分支並拉內容下來(不會衝突)
git fetch
git checkout [branch-name]
# 將 diff 的結果貼到剪貼簿(clipboard)
git diff | pbcopy
git diff staging..HEAD # 顯示 staging brand 和目前 branch 程式碼的差異
git diff staging...HEAD -- path/to/your/file # 只要看某一個檔案
git diff --function-context # 顯示整個 code block 的程式碼
git diff -U10 # 顯示 10 行相關的 context code
git diff --no-index a.txt b.txt # 比較兩個檔案的差異
# Delete untracked files
$ git clean -n # 列出將被刪除的檔案
$ git clean -fd # 刪除沒被 git 追蹤的檔案和資料夾(directory)
安裝
brew install git
指令 CLI
git diff 檢視檔案內容差異
# 檢視檔案內容差異
git diff # 檢視未加入索引的檔案和原檔案有何差異
git diff --staged # 檢視加入索引的檔案和前次提交的檔案有何差異
git diff [first-branch] [second-branch] # 檢視兩個 branch 的檔案有何差異
git show [commit-hash] # 檢視某一次 commit 有何差異
git diff | pbcopy # 把內容複製到剪貼簿,可以存成 .diff 檔就可以看到差異