使用git怎么撤销本地(工作区)修改,暂存区修改,版本区(本地仓库)修改,以及远程仓库的提交

大家在做项目的时候经常会使用git,但同时也会遇到很多问题,比如刚修改后得代码突然后悔了,这时怎么办呢
1、未使用git add 的时候----在工作区
git checkout -- filepathname //放弃修改某个文件
例如: git checkout -- readme.md
git checkout .  //放弃所有修改的文件

git restore . //放弃所有修改的文件

2、已经使用git add 的时候----在暂存区
git reset HEAD filepathname //恢复某个文件到工作区
例如: git reset HEAD readme.md
git reset HEAD . //恢复所有文件到工作区
git  reset  //恢复所有文件到工作区

注意:这里只是恢复到了工作区,如果想放弃修改的代码还需要执行步骤1(工作区)中的操作
3、已经使用git commit提交的了代码----在版本区(本地仓库)
1、如果你想全部撤回并回到远程仓库最新的状态(不保存代码修改)
	1、git reset --hard HEAD^ //回退上一次commit的状态
		//或git reset --hard commit_id //回退某个版本+id号就行
	2、git pull //拉取一下远程最新的
2、如果你想拉回工作区并保存修改。只撤销 commit 和 add(保存代码修改)
		git reset --mixed HEAD^
		或
		git reset HEAD^
3、如果你想撤销commit 但是不撤销 add(保存代码修改)
		git reset --soft HEAD^ //只撤销了git commit , 修改后的代码还在暂存区
4 、终极版,由于你太懒,不管是暂存区,版本区,你只想撤销修改并回到远程最新的版本(不保存代码修改)
 	1 、git fetch --all
 	2、git reset --hard origin/master //git reset --hard origin/远程分支名
	注意:这里只在暂存区和版本区哦
	
4、如果你git push 到了远程分支,这时候你后悔了怎么办
胆小误试,搞之前记得做备份
第一种
回滚远程分支的最近一次提交
git revert HEAD
git push origin 分支名
例如:我刚在master分支提交了一次
   git revert HEAD
   git push origin master
慎用啊~~~这种方式会在远程生成一个版本号

第二种
git reset --hard HEAD^ //回退上一个版本
或
git reset --hard commit_id //回退到某个版本 id就是你的版本号
git push origin HEAD --force //强制推送到远程,可能会受到保护

自己总结的,如果有哪些问题或者不对的地方,也希望大家能给出指导意见。谢谢!

### 三者的核心区别与作用 #### 工作区(Working Directory) 工作区是开发者直接编辑代码的目录,即项目文件夹。它是 Git 本控制流程中最直观的部分,用于存放当前正在开发和修改的文件[^2]。在该区域中,文件的状态为 `Modified`(已修改),表示这些文件已经被更改但尚未提交本历史中。 例如,在工作区修改了 `main.py` 文件后,可以使用以下命令查看状态: ```bash git status ``` 该命令会显示哪些文件处于已修改状态。 #### 暂存区(Staging Area / Index) 暂存区是一个临时存储区域,用于保存准备提交本地仓库修改。它允许开发者有选择性地将部分修改加入提交,而不是一次性提交所有改动。文件在暂存区中的状态为 `Staged`(已暂存)。 通过 `git add` 命令可以将工作区修改添加到暂存区: ```bash git add main.py ``` 此时,`main.py` 的修改已被记录到暂存区,等待下一次提交。 #### 本地仓库(Local Repository) 本地仓库是存储在开发者计算机上的完整本库,包含了项目的全部历史提交记录。每次执行 `git commit` 命令时,Git 会将暂存区的内容保存为一个新的提交,并更新本地仓库的历史本[^4]。 例如,提交暂存区的内容到本地仓库: ```bash git commit -m "Update main.py" ``` 这一步完成后,修改就被永久记录在本地仓库中,可以随时查看或回退。 --- ### 数据流转流程 Git 的四个核心区域之间存在明确的数据流动路径,具体如下: 1. **从工作区暂存区**:通过 `git add` 命令将工作区中已修改的文件添加到暂存区,标记为“即将提交”的状态。 2. **从暂存区本地仓库**:使用 `git commit` 提交暂存区内容,生成一个新的本快照并保存至本地仓库。 3. **从本地仓库远程仓库**:通过 `git push` 将本地仓库提交同步到远程仓库,供团队成员共享和协作。 4. **从远程仓库工作区**:使用 `git pull` 或 `git fetch` 获取远程仓库的更新,并合并到当前分支的工作区中。 这一流程确保了代码变更能够有序地被记录、管理与共享。 --- ### 操作与撤销机制 在 Git 中,针对不同区域的操作提供了灵活的撤销方式: - 放弃工作区未暂存的修改使用 `git checkout` 或 `git restore`(适用于 Git 2.23+): ```bash git restore main.py ``` 这将丢弃工作区中对 `main.py` 的未暂存修改[^5]。 - 若需撤销暂存区修改,可使用 `git reset`: ```bash git reset main.py ``` 此操作会将文件从暂存区移回工作区,保留修改内容但取消其暂存状态[^5]。 - 如果已经提交本地仓库,可以通过 `git reset --soft` 或 `git revert` 回退提交。 --- ### 实际应用场景 理解这三个区域的关系对于日常开发至关重要。例如,在多人协作项目中,若开发者仅在工作区完成大量修改而未将其添加到暂存区提交,则可能导致代码丢失,如同完成了作品却未保存一样[^1]。此外,在处理冲突或调试问题时,合理利用暂存区本地仓库的功能可以更精确地控制本历史,避免不必要的混乱。 因此,掌握工作区暂存区本地仓库之间的区别与协同机制,是提升开发效率和保障项目稳定性的关键基础。 ---
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值