git常见操作

安装完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)
数据安全性 高(无数据丢失) 低(未提交修改会丢失)
典型使用场景 撤销提交但保留修改、修改提交信息 放弃所有未提交修改、回到干净版本

总结

  1. git reset --soft HEAD 是 "温和重置":只动提交历史,暂存区和工作区的修改全保留,适合需要调整提交但不想丢代码的场景。
  2. git reset --hard HEAD 是 "强制重置":版本库、暂存区、工作区全同步到 HEAD 版本,未提交的修改会被彻底删除,使用前务必确认无需保留这些修改。
  3. 核心记忆点:--soft 只改提交记录,--hard 改所有区域(工作区 + 暂存区 + 提交记录)。

代码的常见命令见:

https://blog.csdn.net/m0_73713507/article/details/155317287

https://juejin.cn/post/7566450527867011081

相关推荐
未名编程3 小时前
本地项目上传 GitHub 私有库:GitHub CLI 与 Git 原生双方案详解
git·github
我是一只代码狗3 小时前
git和master分支进行对比差异
git
弘毅 失败的 mian3 小时前
Git 标签管理
经验分享·笔记·git
TPBoreas3 小时前
前端项目 Git 仓库管理策略选择
git
钦拆大仁4 小时前
Git提交代码报错fatal: detected dubious ownership ...
git
C_心欲无痕4 小时前
git - git push同时推送GitHub和Gitee两个远程仓库
git·gitee·github
骁悦彬子4 小时前
IntelliJ IDEA2025 版本控制(svn、git) 修改文件后,所属目录的颜色也变化
git·svn·intellij-idea
一只旭宝5 小时前
Linux专题十四:git代码管理库
git
Irene19915 小时前
在 VSCode 中使用终端克隆 Element Plus 全流程
git·vscode·element plus