Git 常用指令篇
分類
說明
紀錄一些比較常用的 git 指令。
指令列表
$ git branch
列出、建立或刪除分支。
選項
-
(–set-upstream-to=<upstream> | -u <upstream>) [<branchname>]
設定<branchname>
的追蹤訊息,使<upstream>
被視為<branchname>
的上游分支。如果沒有指定<branchname>
,則預設為目前分支。簡單用途為設定當前分支的遠端分支是哪一個。
- branchname: 指定分支名稱
- upstream: 上游分支
-
-a
–all
列出遠端追踪分支和本地分支。 -
-d
–delete
刪除一個分支。該分支必須完全合併在其上游分支中。 -
-D
--delete --force
的快捷方式。 -
-m
–move
移動/重新命名分支及其配置和引用日誌。 -
-M
--move --force
的快捷方式。
範例
$ git branch my-branch
在當前基底建立名為 my-branch 分支。
$ git branch -u origin/dev dev
指定本地 dev 分支的上游為 origin/dev,使用時機舉例: 假設有一個 self 分支,我將 self 重新命名為 dev,接著我就要指定上游分支。
文件說明: https://git-scm.com/docs/git-branch
$ git checkout [<branch>]
切換分支。
- branch: 分支名稱。
選項
- -b <new-branch>
在當前位置<start-point>
,創建一個名為<new-branch>
的新分支,再切換到<new-branch>
分支。
範例
$ git checkout -
切換上一個分支。
文件說明: https://git-scm.com/docs/git-checkout
$ git clone [url]
克隆倉庫。
- url: 倉庫網址。
選項
- -b <name>
- –branch <name>
指定克隆分支。- name: 分支名稱。
文件說明: https://git-scm.com/docs/git-clone
$ git config
你可以用這個指令查詢/設定/取代/取消選項。
選項
- –global
對於寫入選項:寫入全域的~/.gitconfig
檔案而不是倉庫的.git/config
文件,如果該檔案存在而~/.gitconfig
檔案不存在,則寫入$XDG_CONFIG_HOME/git/config
檔案。
範例
$ git config --global alias.tree "log --all --decorate --graph --oneline"
設定別名 git tree
為 git log --all --decorate --graph --oneline
。
文件說明: https://git-scm.com/docs/git-config
$ git commit
建立一個新的提交。
選項
- -m <msg>
-
–message=<msg>
使用給定的<msg>
作為提交資訊。 -
–amend
透過建立一個新的提交來替換目前分支的頂端,也就是更新上一個提交訊息。
$ git log
顯示提交日誌。
選項
-
–all
顯示所有分支上的提交。 -
–decorate[=short|full|auto|no]
打印顯示的任何提交的引用名稱。選項--decorate
是--decorate=short
的簡寫。如果指定了 “short”,則不會打印引用名稱的前綴 “refs/heads/”、”refs/tags/” 和 “refs/remotes/”。
-
–graph
在輸出的左手邊繪製基於文本的提交歷史圖表。 -
–oneline
這是 “–pretty=oneline –abbrev-commit ” 的簡寫,一起使用。
範例
$ git log --all --decorate --oneline --graph
文件說明: https://git-scm.com/docs/git-log
$ git merge
將指定的提交內容併入當前分支。
一般我都是 $ git merge [options] <branch>
,將某個分支合併到當前分支。
- branch 分支
選項
- –ff
- –no-ff
-
–ff-only
處理合併的問題。默認為--ff
。--ff
,可能的話,以快進方式解決合併問題(只更新分支指針以匹配合併後的分支;不創建合併提交)。當不可能時(當合併的歷史不是當前歷史的後代),創建一個合併提交。使用
--no-ff
,在所有情況下都創建一個合併提交,即使該合併可以作為一個快進解決。使用
--ff-only
,在可能的情況下,以快進的方式解決合併的問題。當不可能時,拒絕合併並以非零狀態退出。
文件說明: https://git-scm.com/docs/git-merge
$ git pull
將遠端倉庫中的更改合併到當前分支中。
文件說明: https://git-scm.com/docs/git-pull
選項
- -p
-
–prune
在獲取之前,刪除任何不再存在於遠端的遠端追蹤引用。就是更新本地倉庫中遠端分支資訊,如果遠端分支被刪除,修剪後本地倉庫的遠端分支資訊也會被刪除。
$ git push
使用本地引用更新遠程倉庫引用,同時發送完成給定引用的必要對象。
一般我都用來當作推送本地分支到遠端分支 $ git push <branch>
。
文件說明: https://git-scm.com/docs/git-push
$ git rebase
將一個分支的更改應用到另一個分支上。
假設存在以下歷史記錄且目前分支是 “topic”:
A---B---C topic
/
D---E---F---G master
從這一點來說,以下任一命令的結果:
$ git rebase master
$ git rebase master topic
將會:
A'--B'--C' topic
/
D---E---F---G master
選項
- -i
- –interactive
列出即將重新設定基底的提交的清單。讓使用者在變基(rebase)之前編輯該清單。此模式也可用於拆分提交。
你可以當作是 rebase 互動模式,裡面包含很多選項可以設定,像是刪除提交、合併提交等等。
可參考我寫的 git rebase -i 介紹。
文件說明: https://git-scm.com/docs/git-rebase
$ git reflog
此命令管理 reflog 中記錄的資訊。
在執行某些會影響 commit 指令後,如果執行 git log
發現 commit 不見了,就可以試試看用此指令尋找之前的 commit。
文件說明: https://git-scm.com/docs/git-reflog
$ git remote
管理一組追蹤的倉庫。
命令
-
update
為倉庫中由remotes.<group>
定義的遠端或遠端群組取得更新。使用
--prune
選項,對所有被更新的遠端進行修剪,修剪就是更新本地倉庫中遠端分支資訊,如果遠端分支被刪除,修剪後本地倉庫的遠端分支資訊也會被刪除。
範例
$ git remote update origin --prune
更新遠端 origin 群組的分支,並進行修剪。
文件說明: https://git-scm.com/docs/git-remote
$ git rm
從工作樹和索引中刪除檔案。
選項
- –cached
使用此選項僅從索引中取消暫存和刪除路徑。工作樹檔案,無論是否修改,都將被保留。
範例
$ git rm --cache file
將 file 取消進版本控制。
文件說明: https://git-scm.com/docs/git-rm
$ git stash
保存本地修改到貯藏庫。
命令
-
clear
刪除所有的貯藏條目。 -
drop [-q|–quiet] [<貯藏項>]
從貯藏條目清單中刪除一個單一的貯藏條目。 -
list
列出你目前擁有的儲藏目錄。 -
pop
從貯藏庫列表中移除一個單一的貯藏狀態。
選項
- -q
- –quiet
這個選項只對apply
、drop
、pop
、push
、save
、store
指令有效。
靜默,壓制回饋訊息。
使用技巧
# 暫存本地修改
git stash
# 做一些處理,例如: 切換分支
# 取回暫存的修改
git stash pop
# 假設 貯藏項 有 0 1
git stash list
# 刪除第一項貯藏
git stash drop 1
文件說明: https://git-scm.com/docs/git-stash
一杯咖啡的力量,勝過千言萬語的感謝。
支持我一杯咖啡,讓我繼續創作優質內容,與您分享更多知識與樂趣!