1. Git Config Layer
- System: All users
- Global: All repositories of the current user
- Local: The current repository
2. Git Snapshop

3. Git Workflow


4. Git Revert Changes
4.1 撤销工作区的修改
如果你在工作区修改了文件,但还没有将这些修改添加到暂存区(即未使用 git add),可以使用以下命令撤销修改:
git restore <file> # 撤销指定文件的修改
git restore . # 撤销所有文件的修改4.2 撤销暂存区的修改
如果你已经将修改添加到暂存区(使用了 git add),但还没有提交,可以使用以下命令将文件从暂存区撤回到工作区:
git restore --staged <file> # 将指定文件从暂存区撤回到工作区
git restore --staged . # 将所有文件从暂存区撤回到工作区注意:这不会撤销工作区的修改,只是将文件从暂存区移除。
4.3 撤销已提交的更改
如果你已经提交了更改,但还没有推送到远程仓库,可以使用以下方法撤销提交。
4.3.1 撤销最近一次更改
如果你想撤销最近一次提交,但保留工作区和暂存区的修改:
git reset --soft HEAD~1--soft:保留工作区和暂存区的修改,只撤销提交。HEAD~1:表示撤销最近一次提交。HEAD:local repository的最新版本。
如果你想撤销最近一次提交,但只保留工作区的修改:
git reset --mixed HEAD~1如果你想撤销提交并丢弃工作区的修改:
git reset --hard HEAD~1--hard:彻底丢弃工作区和暂存区的修改,恢复到上一次提交的状态。
4.3.2 撤销某次提交
git reset --soft <commit-hash>4.4 撤销已推送到远程仓库的更改
如果你已经将提交推送到远程仓库,通常不建议直接修改历史记录(如使用 git reset),因为这会影响其他开发者的工作。推荐使用 git revert:
git revert <commit-hash> # 撤销指定提交
git push origin <branch> # 将撤销提交推送到远程仓库4.5 git revert和git reset的区别
4.5.1 git revert
- 作用:撤销某次提交,并生成一个新的提交来记录这次撤销操作。
特点:
- 不会修改历史记录,而是通过新增一个提交来撤销之前的更改。
- 适合用于已经推送到远程仓库的提交,因为不会破坏协作历史。
使用场景:
- 撤销已经推送到远程仓库的提交。
- 需要保留完整的历史记录(例如在团队协作中)。
命令示例:
git revert <commit-hash>- 这会创建一个新的提交,撤销指定提交的更改。
- 如果有冲突,Git 会提示你解决冲突并完成提交。
4.5.2 git reset
- 作用:将当前分支的 HEAD 指针移动到指定的提交,并可以选择是否修改工作区和暂存区。
特点:
- 会修改历史记录,将 HEAD 指针回退到指定的提交。
- 适合用于本地仓库的撤销操作,尚未推送到远程仓库的提交。
使用场景:
- 撤销本地的提交(尚未推送到远程仓库)。
- 需要彻底丢弃某些提交或修改历史记录。
模式:
--soft:只移动 HEAD 指针,不修改暂存区和工作区。--mixed(默认):移动 HEAD 指针,并重置暂存区,但不修改工作区。--hard:移动 HEAD 指针,并重置暂存区和工作区(丢弃所有更改)。
命令示例:
git reset --soft HEAD~1 # 撤销最近一次提交,保留修改 git reset --mixed HEAD~1 # 撤销最近一次提交,重置暂存区 git reset --hard HEAD~1 # 彻底撤销最近一次提交,丢弃所有修改
4.5.3 主要区别
| 特性 | git revert | git reset |
|---|---|---|
| 是否修改历史记录 | 不修改历史记录,生成一个新的提交。 | 修改历史记录,移动 HEAD 指针。 |
| 适用场景 | 已推送到远程仓库的提交。 | 本地未推送的提交。 |
| 工作区和暂存区 | 不影响工作区和暂存区。 | 根据模式(--soft/--mixed/--hard)影响工作区和暂存区。 |
| 协作影响 | 安全,适合团队协作。 | 可能破坏协作历史,需谨慎使用。 |
| 命令示例 | git revert <commit-hash> | git reset --hard HEAD~1 |
4.5.4 使用场景示例
git revert
假设你已经将提交 A -> B -> C 推送到远程仓库,现在想要撤销提交 B:
使用
git revert:git revert B- 这会生成一个新的提交
D,撤销B的更改。 - 历史记录变为
A -> B -> C -> D,远程仓库可以安全地接受这次更改。
- 这会生成一个新的提交
git reset
假设你本地有提交 A -> B -> C,但尚未推送到远程仓库,现在想要撤销提交 B 和 C:
使用
git reset:git reset --hard A- 这会将 HEAD 指针移动到提交
A,并丢弃B和C的更改。 - 历史记录变为
A,但仅适用于本地仓库。
- 这会将 HEAD 指针移动到提交