Skip to content

删除分支

bash
# 删除本地分支
git branch -d <branch-name>
# 删除远程分支
git push origin --delete <branch-name>

批量删除分支

bash
# PowerShell win 环境

# 执行命令
# --format='%(refname:short)' 非常重要,它能确保只输出干净的分支名(去掉前面的空格和星号 * ),避免 Git 报错找不到分支。
git branch -D (git branch --list 'stg-ls-log*' --format='%(refname:short)')

# 管道符
# $_.Trim() 会自动去掉分支名前后的空格.
git branch --list 'stg-ls-log*' | ForEach-Object { git branch -D $_.Trim()}

# Git Bash/Liunx Mac 
git bracnh | grep "stg-ls-log" | xargs git branch -D

# 查看匹配到的分支(删除前先看看)
git branch --list 'stg-ls-log*'

删除远程分支

1. 删除单个远程分支

bash
git push origin --delete <分支>

2. 批量删除远程分支

bash
git branch -r --list 'origin/stg-ls-log*' | ForEach-Object { git push origin --delete ($_.Trim() -replace 'origin/', '') }

# - git branch -r --list 'origin/stg-ls-log*' :列出远程所有符合条件的分支名。
# - $_.Trim() -replace 'origin/', '' :这是一个关键步骤。因为远程分支名通常带有 origin/ 前缀,我们需要把这个前缀去掉,只保留分支名传给 delete 命令。

3. 删除后的后续处理(清理本地缓存)

bash
git fetch -p
# 或者
git remote prune origin

回退提交记录

bash
5b23962f06ddeb85f9520230281644f4fab0c380 (HEAD -> v31-szh-custAnalysisOpt, gitee/v31-szh-custAnalysisOpt) feat: HLKCRM-909 Touch-顾客概要&项目分析&余量分析调整-页面制作
0bddceeaf82e2fec3d99294d2e36746592089e74 feat: HLKCRM-909 Touch-顾客概要&项目分析&余量分析调整-页面制作

# 回退到指定提交记录
## 使用 --soft 重置到目标版本。这会撤销 commit 记录,但把你刚才所有的代码改动留在“暂存区”(Staged):
git reset --soft 0bddceeaf82e2fec3d99294d2e36746592089e74

## 强制同步远程分支
git push origin you_branch_name --force

git reset 详解

|选项移动HEAD指针重置暂存区(Index)重置工作目录 (Workdir)代码改动去向适用场景|
--soft✅ 是❌ 否❌ 否保留在暂存区 (Ready to commit)
--mixed✅ 是✅ 是❌ 否保留在工作目录 (Unstaged)撤销提交并撤销 add,保留代码继续修改
--hard✅ 是✅ 是✅ 是彻底消失 (除非用 reflog 找回)彻底放弃所有修改,回到纯净的历史状态
--merge✅ 是✅ 是⚠️ 部分尝试保留与回退版本无冲突的改动用于撤销失败的合并 (Merge)
--keep✅ 是✅ 是❌ 否如果改动有冲突则 终止操作安全版 --hard ,保护本地未提交改动

名词解释

  • 移动 HEAD 指针 :改变当前分支指向的提交记录(即改变 git log 看到的内容)。
  • 重置暂存区 (Index) :撤销 git add 的效果。
  • 重置工作目录 (Workdir) :直接修改磁盘上的文件内容。

配套命令:强制推送

当你执行了上述任何一种 reset 导致 本地分支落后于远程分支 时,需要配合 push 命令同步远程:

命令含义
git push --force强制覆盖远程分支,不推荐在多人协作分支使用。
git push --force-with-lease更安全的强制推送。如果远程有他人新提交,会报错停止,防止覆盖他人代码。