如何删除git上最后一次提交,Git日常使用操作说明。
文章目录
- 情况一:仅本地未推送的提交
- 情况二:已推送到远程仓库的提交
- ⚠️ 重要注意事项
- 操作流程对比
- 更多Git使用方法参见:
- 一、仓库管理
- 二、基础操作
- 三、分支管理
- 四、远程仓库操作
- 五、撤销与回退
- 六、查看差异
- 七、临时保存修改
- 八、标签管理
- 九、配置文件
- 十、忽略文件配置
- 🔧 常用组合操作
- ⚠️ 注意事项
要删除 Git 上的最后一次提交,根据是否已推送到远程仓库可分为两种情况处理:
情况一:仅本地未推送的提交
解决方案:
# 保留工作区修改(仅撤销提交记录)
git reset --soft HEAD~1
# 或完全丢弃最后一次提交(包括代码修改)
git reset --hard HEAD~1
情况二:已推送到远程仓库的提交
解决方案:
# 1. 本地回退到上一个提交
git reset --hard HEAD~1
# 2. 强制覆盖远程仓库(危险操作!)
git push --force-with-lease origin 分支名
⚠️ 重要注意事项
-
强制推送风险
--force-with-lease
比--force
更安全,但仍会覆盖远程历史记录
▶️ 适用于个人分支/私有仓库
❌ 避免在多人协作的主分支使用 -
团队协作场景替代方案
# 使用 revert 创建反向提交(保留历史记录) git revert HEAD git push origin 分支名
-
同步其他成员的本地仓库
如果他人已拉取旧提交,需执行:git fetch git reset --hard origin/分支名
操作流程对比
操作类型 | 命令 | 适用场景 | 历史记录影响 |
---|---|---|---|
本地撤销提交 | git reset HEAD~1 | 未推送的错误提交 | 完全删除提交 |
强制覆盖远程 | git push --force | 私有分支/紧急修复 | 重写远程历史 |
安全撤销(推荐) | git revert + 正常推送 | 团队协作分支 | 新增反向提交 |
建议优先使用 git revert
方案,除非明确需要修改历史记录。
更多Git使用方法参见:
以下是 Git 使用中 最常用的指令及使用方法,涵盖日常开发的大部分场景:
一、仓库管理
命令 | 说明 | 示例 |
---|---|---|
git init | 初始化新仓库 | git init |
git clone <url> | 克隆远程仓库 | git clone https://github.com/user/repo.git |
二、基础操作
命令 | 说明 | 示例 |
---|---|---|
git add <file> | 添加文件到暂存区 | git add . (添加全部文件) |
git commit -m "message" | 提交暂存区内容 | git commit -m "Fix bug" |
git status | 查看工作区状态 | git status |
git log | 查看提交历史 | git log --oneline (简洁模式) |
三、分支管理
命令 | 说明 | 示例 |
---|---|---|
git branch | 查看本地分支 | git branch -a (查看所有分支) |
git checkout <branch> | 切换分支 | git checkout dev |
git checkout -b <new-branch> | 创建并切换新分支 | git checkout -b feature-login |
git merge <branch> | 合并分支 | git merge dev |
git branch -d <branch> | 删除本地分支 | git branch -d old-feature |
四、远程仓库操作
命令 | 说明 | 示例 |
---|---|---|
git remote -v | 查看远程仓库地址 | git remote -v |
git pull | 拉取远程更新 | git pull origin main |
git push | 推送本地提交 | git push origin dev |
git fetch | 获取远程更新(不合并) | git fetch --all |
五、撤销与回退
命令 | 说明 | 示例 |
---|---|---|
git restore <file> | 撤销工作区修改 | git restore index.html |
git reset --soft HEAD~1 | 撤销提交(保留修改) | 回退到上一个提交 |
git reset --hard HEAD~1 | 彻底丢弃最后一次提交 | 慎用!会丢失修改 |
git revert <commit-id> | 创建反向提交撤销历史记录 | git revert abc123 |
六、查看差异
命令 | 说明 | 示例 |
---|---|---|
git diff | 查看未暂存的修改 | git diff |
git diff --staged | 查看已暂存的修改 | git diff --staged |
git diff <commit1> <commit2> | 比较两个提交的差异 | git diff abc123 def456 |
七、临时保存修改
命令 | 说明 | 示例 |
---|---|---|
git stash | 暂存当前修改 | git stash save "WIP" |
git stash pop | 恢复最近暂存的修改 | git stash pop |
git stash list | 查看暂存列表 | git stash list |
八、标签管理
命令 | 说明 | 示例 |
---|---|---|
git tag | 查看所有标签 | git tag -l "v1.*" |
git tag <tagname> | 创建轻量标签 | git tag v1.0.0 |
git push origin <tagname> | 推送标签到远程 | git push origin v1.0.0 |
九、配置文件
命令 | 说明 | 示例 |
---|---|---|
git config --global user.name "name" | 设置全局用户名 | git config --global user.name "John" |
git config --global user.email "email" | 设置全局邮箱 | git config --global user.email "john@example.com" |
十、忽略文件配置
- 创建
.gitignore
文件 - 添加需要忽略的文件模式:
# 示例 *.log node_modules/ .env
🔧 常用组合操作
-
撤销所有未提交的修改:
git restore . # 撤销工作区修改 git clean -fd # 删除未跟踪的文件/目录
-
修改最后一次提交:
git add . # 添加遗漏的文件 git commit --amend -m "新提交信息"
-
同步远程已删除的分支:
git fetch --prune
⚠️ 注意事项
- 强制推送 (
--force
):仅限个人分支使用,团队协作慎用 - 分支合并冲突:解决冲突后需
git add
+git commit
.gitignore
文件需在文件未被跟踪前添加才生效
掌握这些指令可覆盖 90% 的日常开发需求,建议搭配图形化工具(如 VS Code 的 Git 功能)使用更高效!
🚀 你已掌握改变世界的力量 🚀
每一次 git commit
都是进步的印记,
每一次 git push
都在向未来交付价值。
代码世界没有「完美提交」,只有持续迭代的勇气——
那些让你抓狂的 merge conflict
,终将成为登顶的阶梯!
💡 记住:
- 遇到
error
时,你只是在解锁新成就的路上 - 每个
bug
都是系统在提醒:「此处可优化」 - 当你想
git reset
重来时,宇宙都在为你喝彩
🌱 今日最好的代码,永远是明天的起点
用 git branch
开拓创新之路,
用 git revert
优雅修正方向,
用 git log
见证自己破茧成蝶的轨迹。
🌈 写给未来的你:
当你在终端敲下第1000次命令时,
会感谢今天这个坚持学习的自己。
代码即诗行,终端即画布——
你正在创造数字时代的艺术品
🔥 保持 pushing,星辰大海的版本库等你提交!
(别忘了给自己一个温暖的 git commit -m "我爱这滚烫的编程人生"
💻✨)
上一篇:MFC中CString类型是如何怎么转std::string的