Git 退版流程

只想修改 commit 訊息(內容不變)

# 修改最後一次 commit 的訊息
git commit --amend

# 使用強制推送更新遠端
git push --force-with-lease origin [branch_name]

commit 的檔案內容也需要修改

# 加入暫存區
git add .

# 修改最後一次 commit(包含訊息與內容)
git commit --amend

# 使用強制推送更新遠端
git push --force-with-lease origin [branch_name]

刪除分支

# 刪除本地分支
git branch -d [branch_name]

# 若分支未合併但仍要刪除,改用 -D
# git branch -D [branch_name]

# 刪除遠端分支
git push origin --delete [branch_name]

完整流程(安全版)

# 確認當前不在要刪除的分支上
git checkout master

# 刪除本地分支
git branch -d [branch_name]

# 刪除遠端分支
git push origin --delete [branch_name]

# 列出本地分支
git branch

# 列出遠端分支
git branch -r

reset 取消這次合併

# 回到合併之前的 commit
git reset --hard [commit_id]

# 若分支已推送到遠端,需強制推送以同步狀態
git push --force-with-lease origin [branch_name]

改用 revert(保留歷史,反做一次)

# 用 revert 來取消 merge commit,保留歷史紀錄
git revert -m 1 [commit_id]

-m 1 的意思是保留哪一個父 commit,通常是被 merge 的目標分支(例如 main 為父 1)

確認某一個 commit 是否已存在於遠端

# 列出所有包含此 commit 的遠端分支
git branch -r --contains [commit_id]

# 查看本地比遠端多了哪些 commit
git log origin/[branch_name]..[branch_name] --oneline

# 查看遠端比本地多了哪些 commit
git log [branch_name]..origin/[branch_name] --oneline

# 確認當前 HEAD 與遠端 HEAD 是否一致
git rev-parse HEAD
git rev-parse origin/[branch_name]