基礎操作
Force Push
1git push -f
強制 Push 覆蓋 Head
1git push origin HEAD:main -f
移除追蹤
1git rm -r --cached <path/to/file or dir>
當你已經將某些文件或目錄添加並提交到 Git 存儲庫中,但現在希望停止跟蹤它們時,可以使用這個命令。例如,你可能想忽略某些生成的文件或臨時文件,但又不希望它們被刪除。
Branch 管理
查看 Branch 詳細資料
1git 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 feature2 develop d3c2b1a [origin/develop: behind 2] Fix bug
在這個例子中:
master
和develop
是分支名稱。a1b2c3d
和d3c2b1a
是每個分支最後一次提交的提交哈希。[origin/master: ahead 1]
表示master
分支比它的上游分支origin/master
高出一個提交,這意味着有一個提交尚未被推送到遠端倉庫。[origin/develop: behind 2]
表示develop
分支落後於它的上游分支origin/develop
兩個提交,這意味着有兩個提交尚未從遠端倉庫拉取到本地。
這個指令是管理多分支開發過程中一個非常有用的工具,能夠幫助開發者快速瞭解分支的當前狀態以及它們與遠端倉庫之間的同步狀況。
Rebase 操作
Rebase 到 Remote Main 分支
1git rebase origin main
使用 rebase -i 將最新的兩個 commit 整合為一的流程
1git add .2git commit -m temp3git rebase -i head^^
終端會使用 vi 顯示以下內容:
1pick a965f00 fix: fix the wrong url domain.2pick 76ec484 temp3
4# Rebase 5668cfa..76ec484 onto 5668cfa (2 commands)5...
修改為以下內容,輸入 :x
保存:
1pick 76ec484 temp2f 76ec484 temp
使用 git log
確認 commit 已經變為一個。
任意剪接
1git rebase --onto <new-commit-id> <orig-commit-id>
Git 小技巧 - 使用 git rebase —onto 實現任意剪接 實務上不太使用這個方法,因為隨意修改基準點很容易產生嚴重衝突。
Commit 管理
回復操作
回覆到上一個 commit (不可挽救方法)
1git reset --hard head^
Patch 操作
建立與應用 patch
1git format-patch -o patches head^2git apply patches/*.patch # 應用多個 patch3# or4git apply ./patches/0001-feature-add-ga-script.patch # 應用一個 patch
Tag 管理
新增 Tag
1# 創建輕量級標籤2git tag v1.0.03
4# 創建附註標籤(推薦使用,可以添加標籤信息)5git tag -a v1.0.0 -m "version 1.0.0 release"6
7# 為特定的commit創建標籤8git tag -a v1.0.0 9fceb02 -m "version 1.0.0 release"
查看 Tag
1# 列出所有標籤2git tag3
4# 查看標籤詳細信息5git show v1.0.06
7# 查看遠端標籤8git ls-remote --tags <remote>
推送 Tag 到遠端
1# 推送特定標籤到遠端2git push origin v1.0.03
4# 推送所有標籤到遠端5git push origin --tags
刪除 Tag
1# 刪除本地標籤2git tag -d v1.0.03
4# 刪除遠端標籤(方法1)5git push origin :refs/tags/v1.0.06
7# 刪除遠端標籤(方法2)8git push --delete origin v1.0.0
更新 Tag
1# 修改標籤指向的commit(需要先刪除原標籤)2git tag -d v1.0.03git tag v1.0.0 <新的commit號>4
5# 如果標籤已經推送到遠端,需要強制更新6git push origin :refs/tags/v1.0.0 # 先刪除遠端標籤7git push origin v1.0.0 # 再推送新標籤
需要注意的是:
- 建議使用附註標籤(-a 參數),因為它包含了創建者信息、日期、標籤信息等
- 刪除遠端標籤後,其他開發者需要使用
git fetch --prune --prune-tags
(git fetch -pP
) 來更新他們的本地倉庫 - 標籤命名建議使用語義化版本號(如:v1.0.0),便於管理和理解