删除分支
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 --forcegit 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 | 更安全的强制推送。如果远程有他人新提交,会报错停止,防止覆盖他人代码。 |