Vinc3nt's Life

Git-cli Cheatsheet

2024-03-27
develop
git
cheatsheet
最後更新:2025-01-26
6分鐘
1094字

基礎操作

Force Push

Terminal window
1
git push -f

強制 Push 覆蓋 Head

Terminal window
1
git push origin HEAD:main -f

移除追蹤

Terminal window
1
git rm -r --cached <path/to/file or dir>

當你已經將某些文件或目錄添加並提交到 Git 存儲庫中,但現在希望停止跟蹤它們時,可以使用這個命令。例如,你可能想忽略某些生成的文件或臨時文件,但又不希望它們被刪除。


Branch 管理

查看 Branch 詳細資料

Terminal window
1
git branch -vv

git branch -vv 是一個 Git 指令,用於顯示當前庫中的所有分支,以及每個分支最新的提交信息。這條指令提供了一個分支的概覽,包括每個分支的名字、最後一次提交的簡短描述,以及該分支與其上游分支(如果有的話)之間的差異。

這個指令的具體組件如下:

  • git 是命令行工具,用於操作 Git 版本控制系統。
  • branch 是一個子命令,用於操作與分支相關的各種任務。
  • -vv--verbose --verbose 是一個選項,加強了 git branch 命令的輸出信息。第一次使用 -v--verbose 會顯示每個分支的最後一次提交的摘要。使用 -vv 會在此基礎上,還會顯示與上游分支的關係,例如是否有需要推送(push)或拉取(pull)的提交。

使用 git branch -vv 指令時,你可以看到類似以下的輸出:

1
master a1b2c3d [origin/master: ahead 1] Add new feature
2
develop d3c2b1a [origin/develop: behind 2] Fix bug

在這個例子中:

  • masterdevelop 是分支名稱。
  • a1b2c3dd3c2b1a 是每個分支最後一次提交的提交哈希。
  • [origin/master: ahead 1] 表示 master 分支比它的上游分支 origin/master 高出一個提交,這意味着有一個提交尚未被推送到遠端倉庫。
  • [origin/develop: behind 2] 表示 develop 分支落後於它的上游分支 origin/develop 兩個提交,這意味着有兩個提交尚未從遠端倉庫拉取到本地。

這個指令是管理多分支開發過程中一個非常有用的工具,能夠幫助開發者快速瞭解分支的當前狀態以及它們與遠端倉庫之間的同步狀況。


Rebase 操作

Rebase 到 Remote Main 分支

Terminal window
1
git rebase origin main

使用 rebase -i 將最新的兩個 commit 整合為一的流程

Terminal window
1
git add .
2
git commit -m temp
3
git rebase -i head^^

終端會使用 vi 顯示以下內容:

1
pick a965f00 fix: fix the wrong url domain.
2
pick 76ec484 temp
3
4
# Rebase 5668cfa..76ec484 onto 5668cfa (2 commands)
5
...

修改為以下內容,輸入 :x 保存:

1
pick 76ec484 temp
2
f 76ec484 temp

使用 git log 確認 commit 已經變為一個。

任意剪接

Terminal window
1
git rebase --onto <new-commit-id> <orig-commit-id>

Git 小技巧 - 使用 git rebase —onto 實現任意剪接 實務上不太使用這個方法,因為隨意修改基準點很容易產生嚴重衝突。


Commit 管理

回復操作

回覆到上一個 commit (不可挽救方法)

Terminal window
1
git reset --hard head^

Patch 操作

建立與應用 patch

Terminal window
1
git format-patch -o patches head^
2
git apply patches/*.patch # 應用多個 patch
3
# or
4
git apply ./patches/0001-feature-add-ga-script.patch # 應用一個 patch

Tag 管理

新增 Tag

Terminal window
1
# 創建輕量級標籤
2
git tag v1.0.0
3
4
# 創建附註標籤(推薦使用,可以添加標籤信息)
5
git tag -a v1.0.0 -m "version 1.0.0 release"
6
7
# 為特定的commit創建標籤
8
git tag -a v1.0.0 9fceb02 -m "version 1.0.0 release"

查看 Tag

Terminal window
1
# 列出所有標籤
2
git tag
3
4
# 查看標籤詳細信息
5
git show v1.0.0
6
7
# 查看遠端標籤
8
git ls-remote --tags <remote>

推送 Tag 到遠端

Terminal window
1
# 推送特定標籤到遠端
2
git push origin v1.0.0
3
4
# 推送所有標籤到遠端
5
git push origin --tags

刪除 Tag

Terminal window
1
# 刪除本地標籤
2
git tag -d v1.0.0
3
4
# 刪除遠端標籤(方法1)
5
git push origin :refs/tags/v1.0.0
6
7
# 刪除遠端標籤(方法2)
8
git push --delete origin v1.0.0

更新 Tag

Terminal window
1
# 修改標籤指向的commit(需要先刪除原標籤)
2
git tag -d v1.0.0
3
git tag v1.0.0 <新的commit號>
4
5
# 如果標籤已經推送到遠端,需要強制更新
6
git push origin :refs/tags/v1.0.0 # 先刪除遠端標籤
7
git push origin v1.0.0 # 再推送新標籤

需要注意的是:

  1. 建議使用附註標籤(-a 參數),因為它包含了創建者信息、日期、標籤信息等
  2. 刪除遠端標籤後,其他開發者需要使用 git fetch --prune --prune-tags (git fetch -pP) 來更新他們的本地倉庫
  3. 標籤命名建議使用語義化版本號(如:v1.0.0),便於管理和理解
本文標題:Git-cli Cheatsheet
文章作者:Vincent Lin
發布時間:2024-03-27