Git: 常用指令

無論是不是初次學習Git,使用Git的第一步就是要在本機(自己電腦)建立一個新的Git檔案儲存庫(repository):

$ git init



入門基本指令

前置作業 - Git環境變數設定

如果只特別針對一個專案設定Git的環境變數(例如專案開發者名稱、email等),可用以下指令(會覆蓋全域環境設定):

# 設定開發者名稱 (GIT_AUTHOR_NAME)
$ git config user.name "作者名"

# 設定開發者email (GIT_AUTHOR_EMAIL)
$ git config user.email "作者email"

# 檢視區域環境變數設定
$ git config --list --local

若要對所有使用Git的專案設定作者、email,可用全域環境設定(能當作所有使用Git專案的預設環境設定):

# 設定全域開發者名稱
$ git config --global user.name "作者名"

# 設定全域開發者email
$ git config --global user.email "作者email"

# 檢視全域環境變數設定
$ git config --list --global

# 修改預設輸入編輯器
git config --global core.editor "vim"


開始使用Git

以下是入門Git最常用到的幾個基本指令:

# 檢視Git儲存庫狀態
$ git status

# 修改檔案後, 要新增檔案到Git儲存庫的暫存區(index), 讓Git追蹤檔案狀況
# 可只新增指定檔案(檔名)或一次新增全部未被追蹤的檔案(.)
$ git add 檔名
$ git add 檔名1 檔名2 檔名3
$ git add .

# 提交暫存區檔案到儲存庫, 意即讓Git記錄本次檔案修改狀況
$ git commit -m "提交訊息"

# 檢視目前分支完整或精簡(--oneline)的所有提交紀錄
$ git log (即 git log HEAD)
$ git log --oneline

# 檢視所有分支送交紀錄
$ git log --all



常用指令

暫存

暫存很適合用在「還不想提交(commit)目前檔案狀態」,卻必須切換分支或做其他事情的時候,這時候可以用 git stash 暫存目前檔案狀態:

# 暫存目前檔案狀態
$ git stash

# 取出並套用(最新一個@{0})暫存紀錄
$ git stash pop

# 套用(最新一個@{0})暫存紀錄(不會從stash刪除這個紀錄)
$ git stash apply

# 取出並套用特定一個暫存紀錄
$ git stash pop stash@{index}

# 套用特定一個暫存紀錄(不會從stash刪除這個紀錄)
$ git stash apply stash@{index}

# 檢視暫存紀錄
$ git stash list

# 刪除特定一個暫存紀錄
$ git stash drop stash@{index}

# 清除所有暫存紀錄
$ git stash clear


遠端

與遠端儲存庫(e.g., GitHub, GitLab, bitbucket, etc)建立連線、上傳與下載遠端儲存庫的專案等的指令

# 與遠端儲存庫建立連線
# origin只是常用的遠端分支名稱, 可改成其他名稱
$ git remote add origin 遠端容器位址

# 複製遠端儲存庫專案
git clone remote_repository_address

# 上傳專案至遠端儲存庫
# 若遠端沒有分支會同時新增遠端分支
$ git push 遠端容器別名 本地分支名
$ git push origin new_dev
$ git push -u origin local_branch

# 從指定的本地分支上傳專案至遠端儲存庫的指定分支
$ git push 遠端容器別名 本地分支名:遠端分支名
$ git push origin new_dev:remote_new_dev

# 抓取遠端容器的最新資訊以檢視
$ git fetch

# 抓取並合併遠端容器的紀錄(即 git fetch + git merge/rebase)
$ git pull


分支

# 檢視分支
$ git branch        // 檢視本機端分支
$ git branch -r        // 檢視遠端分支
$ git branch -a        // 檢視所有分支

# 新增分支
$ git branch 分支名
$ git branch 分支名 目前分支某個commit

# 切換分支
$ git checkout 分支名
$ git checkout -f 分支名        // 強制切換

# 新增並切換分支
$ git checkout -b 分支名

# 切換分支並合併目前未提交的檔案狀態(可能有合併衝突要處理)
$ git checkout -m 分支名

# 合併分支(要先切換到要合併其他分支的那個分支A)
$ git merge 要被合併的分支B  // 分支B會被合併至分支A

# 刪除分支
$ git branch -d 分支名         // (--delete)
$ git branch -D 分支名        // 強制刪除(--delete --force)

# 修改分支名稱
$ git branch -m oldBranchName newBranchName


直接用Git查看常用指令

# 檢視常用命令
$ git

# 檢視所有指令
$ git help --all

# 檢視所有子指令
$ git help subcommend
$ git subcommend --help

# 檢視git版本
$ git --version



檔案補交、重寫commit訊息

檔案補交、復原commit後的檔案等動作都只適合用在還沒上傳到遠端儲存庫的commits;若既有的commits已上傳遠端儲存庫,為避免影響協作,建議還是將藥補交的檔案另外新增一個commit,不要合併到目前既有的commits。

補交檔案

# 補交檔案且不用修改commit訊息(要先git add 檔案)
$ git commit --amend --no-edit

# 補交檔案並且修改commit訊息(要先git add 檔案)
$ git commit --amend


重寫commit訊息

# 重寫最新(最後)一個commit訊息
$ git commit --amend -m "最新一個commit的新訊息"

# 用rebase重寫某一commit的訊息
# 在rebase介面,把要更改訊息的commit前面pick改成reword,並在commit之後改成新的訊息
$ git rebase -i HEAD~n
  reword commit new_commit_message