git回退版本记录

在学习spring源码的时候, 一次提交了一个文件名为gradle-5.6.3-all.zip的文件。后续又提交了多次,在台式机pull代码的时候发现没有拉取到。

git最大允许提交文件大小为100Mb。但是本地历史提交版本中有一次提交了大文件导致在后续的版本中删除这个文件还是不能push成功。
解决:
使用git cherry 查看历史提交记录,本地提交了但没push的可以看到。
git log查看提交过的记录
git reset 版本号 还原到历史某个版本
git pull origin/master
手动解决冲突,
git push origin/master

<think> 在 Git回退版本号是常见操作,主要用于撤销提交、恢复历史版本或丢弃改动。以下是详细的回退方法和注意事项: ### 核心命令与场景 | **场景** | **命令** | **风险** | |------------------------------|-----------------------------------------------------|----------------------------------| | 丢弃工作区修改 | `git checkout -- <file>` | 永久丢失未提交修改 | | 取消暂存 | `git reset HEAD <file>` | 不影响工作区文件内容 | | **回退本地提交** | `git reset [--soft\|--mixed\|--hard] <commit-hash>` | 改变提交历史,影响远程协作 | | 撤销远程提交 | `git revert <commit-hash>` | 生成反向提交,安全但历史不整洁 | | 强制推送覆盖远程 | `git push -f origin <branch>` | 可能覆盖他人提交,需团队协调 | ### 实操步骤详解 #### 1. 查看提交历史 ```bash git log --oneline # 简洁格式 git log -p # 带修改详情 ``` 示例输出: ``` a1b2c3d (HEAD->main) 修复登录验证BUG e4f5g6h 添加用户管理模块 i7j8k9l 初始化项目 ``` #### 2. 本地回退到指定版本 ```bash # 回退模式说明: # --soft: 保留工作区和暂存区改动 # --mixed (默认): 保留工作区改动,重置暂存区 # --hard: 丢弃所有改动(危险!) git reset --hard e4f5g6h # 回退到指定commit ``` #### 3. 撤销已推送提交 ```bash # 创建反向提交(推荐安全方式) git revert a1b2c3d # 生成抵消a1b2c3d改动的提交 git push origin main # 强制覆盖远程(谨慎使用) git reset --hard e4f5g6h git push -f origin main # 强制推送覆盖远程历史 ``` #### 4. 恢复误删的提交 ```bash # 查找丢失的commit git reflog # 显示所有操作记录 reset --hard HEAD@{2} # 通过reflog索引恢复 ``` ### 特殊场景处理 **场景1:回退单个文件到历史版本** ```bash git checkout a1b2c3d -- src/index.js # 将文件恢复至指定commit状态 ``` **场景2:撤销多次错误提交** ```bash # 交互式重置(复杂操作) git rebase -i HEAD~3 # 修改最近3次提交 ``` **场景3:恢复已删除分支** ```bash git checkout -b recovered-branch a1b2c3d # 基于旧commit创建分支 ``` ### 注意事项 1. **--hard 危险操作**:会永久删除工作区和暂存区未提交的改动 2. **强制推送规则**: - 禁止在公共分支强制推送 - 推送前通知团队成员 - 推送后要求他人重新拉取 3. **备份策略**:执行危险操作前建议创建临时分支备份 ```bash git branch backup-before-reset ``` 4. **团队协作原则**: - 使用 `revert` 代替 `reset` 处理已推送提交 - 发布分支禁止回退操作 §§相关问题§§1. 使用 `git revert` 和 `git reset` 撤销提交的主要区别是什么?2. 强制推送(git push -f)后如何协调团队其他成员的操作?3. 如何利用 `git reflog` 恢复误删的分支或提交?4. 在大型项目中组织安全回退流程的最佳实践有哪些?5. 如何设计 Git 事件监控系统预防误操作风险? </think> ### Git 回退版本号详解 在 Git回退版本号是常见的版本控制操作,主要用于撤销提交、恢复历史状态或修复错误提交。以下是完整的操作方法和注意事项: --- #### **核心命令与场景** | **操作类型** | **命令** | **适用场景** | **是否影响远程** | |--------------------|---------------------------------------|----------------------------------|------------------| | 软回退 | `git reset --soft <commit-hash>` | 仅撤销提交,保留修改到暂存区 | 不影响 | | 混合回退 (默认) | `git reset --mixed <commit-hash>` | 撤销提交并取消暂存(保留工作区) | 不影响 | | 硬回退 (高风险) | `git reset --hard <commit-hash>` | 彻底丢弃提交和本地修改 | 不影响 | | 安全撤销 (推荐) | `git revert <commit-hash>` | 创建逆操作提交保留历史记录 | 影响 | | 强制覆盖远程 | `git push -f origin <branch-name>` | 强制同步本地回退到远程仓库 | 影响 | --- #### **详细操作步骤** 1. **查看提交历史** ```bash git log --oneline # 精简模式 git log --graph # 图形化查看分支 ``` 示例输出: ``` c1d2e3f (HEAD -> main) 修复登录BUG a4b5c6d 添加支付功能 e7f8g9h 初始化项目 ``` 2. **本地回退操作** - 回退到指定提交(保留修改): ```bash git reset a4b5c6d # 默认 --mixed ``` - 彻底丢弃回退点之后的提交: ```bash git reset --hard e7f8g9h ``` 3. **撤销已推送的提交** ```bash git revert c1d2e3f # 创建逆提交 git push origin main # 安全推送 ``` 4. **强制覆盖远程(谨慎使用)** ```bash git reset --hard e7f8g9h # 本地回退 git push -f origin main # 强制覆盖远程 ``` --- #### **特殊场景处理** **场景1:回退单个文件** ```bash git checkout e7f8g9h -- src/index.js ``` **场景2:恢复误删的提交** 1. 查看操作记录: ```bash git reflog # 显示所有HEAD变更 ``` 2. 恢复指定操作: ```bash git reset --hard HEAD@{3} ``` **场景3:撤销多次提交** ```bash # 撤销最近3次提交 git reset HEAD~3 --soft ``` --- #### **注意事项** 1. **--hard 操作风险** - 永久删除工作区和暂存区的未提交修改 - 操作前备份关键代码:`git stash save "backup"` 2. **强制推送准则** - 禁止在公共分支(如 main/dev)强制推送 - 个人分支推送前需通知团队成员 - 推送后执行同步脚本:`git fetch --all && git reset --hard origin/main` 3. **最佳实践** ```bash # 危险操作前创建恢复点 git tag BACKUP_BEFORE_RESET # 推荐使用revert代替reset git revert --no-commit a4b5c6d..c1d2e3f ``` --- #### **操作流程图** ``` 工作区 → 暂存区 → 本地仓库 → 远程仓库 reset --hard 重置所有阶段 reset --mixed 重置到工作区 (默认) reset --soft 仅重置提交点 revert 添加逆提交 ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值