安装完git工具后,先要通过git config配置用户名和邮箱
git config --global user.name 'xxxx'
git config --global user.email 'xxx@xxx'
然后可以通过git clone下载远程仓库代码
git clone https://gitee.com/xxxx.git
接下来需要查看git分支的代码,下面是我所在的项目代码
$ git branch -a
* (HEAD detached at origin/tbox_data)
master
remotes/origin/HEAD -> origin/master
remotes/origin/master
remotes/origin/tbox_data
可以git checkout切本地分支,再关联远程分支
$ git checkout -b cqc origin/tbox_data
Switched to a new branch 'cqc'
branch 'cqc' set up to track 'origin/tbox_data'.
本地关联远程分支
$ git branch --set-upstream-to=origin/tbox_data cqc
branch 'cqc' set up to track 'origin/tbox_data'.
注意上面不带git branch -a中的"remotes/"部分
接下来就是提交修改代码的流程
1. 确认当前分支(可选)
git branch
2. 暂存所有修改
git add .
3. 提交到本地
git commit -m "dev分支:新增xxx功能"
4. 拉取远程最新
git pull origin dev
5. 推送到远程(首次加 -u,后续直接 git push)
git push -u origin dev
接下来说下如果提交出错后怎么处理,这也是git比较头疼的问题
如果代码比较少,可以本地拷贝出来,然后执行git reset --hard HEAD
git reset --hard HEAD会同时修改版本库、暂存区和工作区,强制让这三个区域完全匹配 HEAD 指向的版本。可以理解为:"彻底回滚,清空所有未提交的修改,回到指定版本的纯净状态"。
然后再拷贝自己修改的代码到指定位置,重新提交代码。
当然回退代码还有git reset --soft HEAD和git restore,可以自己研究
区别如下
在解释区别前,先明确 Git 三个关键区域的定义,这是理解 reset 命令的基础:
- 工作区(Working Directory):你本地正在编辑的文件目录,是最 "活跃" 的区域。
- 暂存区(Staging Area/Index) :准备提交的文件快照,执行
git add后文件会进入这里。 - 版本库(Repository) :Git 存储提交历史和版本信息的区域,
git commit会把暂存区内容存入这里。 HEAD:指向当前分支的最新提交,可理解为 "当前版本的指针"。
一、git reset --soft HEAD(软重置)
作用
仅修改版本库的 HEAD 指针,不改变暂存区和工作区。可以理解为:"撤销提交,但保留所有修改(暂存区和工作区都不变)"。
示例代码 & 场景
假设你刚提交了一个版本(commit A),但发现提交信息写错了,想修改后重新提交:
# 查看当前提交记录(确认HEAD位置)
git log --oneline
# 输出示例:a1b2c34 (HEAD -> main) 初始提交
# 软重置到当前HEAD(等价于git reset --soft HEAD~0,无实际变化)
# 若要撤销最后一次提交,用 git reset --soft HEAD~1
git reset --soft HEAD~1
# 此时查看状态:暂存区仍保留上次提交的所有文件
git status
# 输出:Changes to be committed:
# modified: test.txt(文件仍在暂存区)
# 修改提交信息后重新提交
git commit -m "修正后的提交信息"
关键影响
- 版本库:
HEAD指针回退到指定版本(如HEAD~1)。 - 暂存区:完全保留 重置前的内容,所有文件仍处于 "已暂存" 状态。
- 工作区:完全保留 所有修改,无任何文件被覆盖。
二、git reset --hard HEAD(硬重置)
作用
同时修改版本库、暂存区和工作区,强制让这三个区域完全匹配 HEAD 指向的版本。可以理解为:"彻底回滚,清空所有未提交的修改,回到指定版本的纯净状态"。
示例代码 & 场景
假设你在工作区写了很多无效代码,想一键回到最新提交的干净状态:
# 查看当前修改(工作区有未提交的修改)
git status
# 输出:Changes not staged for commit:
# modified: test.txt
# 硬重置到当前HEAD
git reset --hard HEAD
# 再次查看状态:工作区和暂存区都清空
git status
# 输出:nothing to commit, working tree clean
关键影响
- 版本库:
HEAD指针回退到指定版本。 - 暂存区:清空所有暂存内容 ,与
HEAD版本的暂存区一致。 - 工作区:强制覆盖所有修改,未提交的代码会被彻底删除(无法恢复)。
三、核心区别对比表
| 维度 | git reset --soft HEAD | git reset --hard HEAD |
|---|---|---|
| 版本库(HEAD) | 改变(指针回退) | 改变(指针回退) |
| 暂存区 | 不改变(保留所有暂存) | 改变(清空并匹配 HEAD) |
| 工作区 | 不改变(保留所有修改) | 改变(覆盖并匹配 HEAD) |
| 数据安全性 | 高(无数据丢失) | 低(未提交修改会丢失) |
| 典型使用场景 | 撤销提交但保留修改、修改提交信息 | 放弃所有未提交修改、回到干净版本 |
总结
git reset --soft HEAD是 "温和重置":只动提交历史,暂存区和工作区的修改全保留,适合需要调整提交但不想丢代码的场景。git reset --hard HEAD是 "强制重置":版本库、暂存区、工作区全同步到HEAD版本,未提交的修改会被彻底删除,使用前务必确认无需保留这些修改。- 核心记忆点:
--soft只改提交记录,--hard改所有区域(工作区 + 暂存区 + 提交记录)。
代码的常见命令见: