Git 常用指令篇


分類

建立時間: 2023年9月13日 09:35
更新時間: 2024年6月3日 13:43

說明

紀錄一些比較常用的 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 treegit log --all --decorate --graph --oneline

文件說明: https://git-scm.com/docs/git-config


$ 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


$ 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
    這個選項只對 applydroppoppushsavestore 指令有效。
    靜默,壓制回饋訊息。

使用技巧

# 暫存本地修改
git stash

# 做一些處理,例如: 切換分支

# 取回暫存的修改
git stash pop
# 假設 貯藏項 有 0 1
git stash list

# 刪除第一項貯藏
git stash drop 1

文件說明: https://git-scm.com/docs/git-stash


觀看次數: 415
git
按讚追蹤 Enjoy 軟體 Facebook 粉絲專頁
每週分享資訊技術

一杯咖啡的力量,勝過千言萬語的感謝。

支持我一杯咖啡,讓我繼續創作優質內容,與您分享更多知識與樂趣!