Git 常用命令速查与回滚技巧:从日常提交到安全撤销

举报
yd_260985715 发表于 2026/11/10 07:48:58 2026/11/10
【摘要】 Git 是日常开发中最离不开的版本控制工具,几乎每个项目都会用到它。但很多人的用法停留在 add、commit、push 这几条命令上,一旦遇到提交错了、合并冲突了、分支误删了,就容易手忙脚乱。本文把我工作中最常用的 Git 命令和回滚方法整理成一份速查笔记,重点说清楚每条命令到底改变了什么,以及在什么场景下使用才安全。 一、每天都会用到的五条命令新建仓库或者加入已有项目是第一步。git i...

Git 是日常开发中最离不开的版本控制工具,几乎每个项目都会用到它。但很多人的用法停留在 add、commit、push 这几条命令上,一旦遇到提交错了、合并冲突了、分支误删了,就容易手忙脚乱。本文把我工作中最常用的 Git 命令和回滚方法整理成一份速查笔记,重点说清楚每条命令到底改变了什么,以及在什么场景下使用才安全。

一、每天都会用到的五条命令

新建仓库或者加入已有项目是第一步。git init 可以在当前目录初始化一个新仓库,git clone 可以把远程仓库完整复制到本地。开始写代码之后,git status 是最值得养成的习惯,它能清楚地告诉你工作区和暂存区现在是什么状态,改了哪些文件,有没有新加入但还没有被跟踪的文件。

改动确认无误后,用 git add 把改动放进暂存区。可以一次加入全部改动,也可以只加入某一个文件,分批提交时后者更灵活。git commit 把暂存区的内容提交到本地仓库。提交信息建议写清楚改了什么、为什么改,这会让以后的排查工作轻松很多。最后用 git push 把本地提交推送到远程仓库,第一次推送新分支时加上 -u 建立上下游关联,以后就可以直接写 git push。

二、用分支把改动隔离开

分支是 Git 最实用的功能之一。git branch 可以查看本地分支,前面带有星号的就是当前所在的分支。创建并切换到一个新分支,可以用 git checkout -b 新分支名,现在更推荐使用 git switch -c 新分支名,语义更加清晰,不容易和检出文件的操作混淆。

开发完成后,把分支合并回主分支。先切换到目标分支,再执行 git merge。合并时如果出现冲突也不要慌,打开冲突文件,把标记出来的冲突部分逐一确认,改好之后重新 add 并提交就可以了。日常开发建议每个需求单独开一个分支,合并完成并确认没有问题之后,再用 git branch -d 删除已经被合并的分支,让分支列表保持干净。

三、回滚之前,先分清改动在哪里

回滚是最容易用错的地方,操作之前首先要判断:要撤销的改动现在处在哪一个阶段。

第一种情况,改动还在工作区,还没有执行 add。这时可以用 git checkout – 文件名,丢弃工作区的改动,让文件回到上一次提交时的状态。这条命令会直接丢弃改动,执行之前务必确认文件内容真的不再需要了。

第二种情况,改动已经被 add 到了暂存区,但还没有提交。用 git reset HEAD 文件名,可以把文件从暂存区撤回来,工作区里的改动仍然保留,相当于只撤销了 add 这一步,代码本身不受影响。

第三种情况,改动已经提交到了本地仓库。如果只想撤销最近一次提交但保留代码改动,用 git reset --soft HEAD~1。如果想撤销提交,同时把改动退回工作区,用 git reset --mixed HEAD~1,这是默认的模式。如果确定连工作区的改动也不要了,才使用 git reset --hard HEAD~1。但这条命令具有破坏性,工作区的改动是找不回来的,执行之前一定要再三确认。

四、已经推送到远程的提交怎么撤销

已经推送到远程的提交,不建议再用 reset 加强制推送来处理,因为这样会改写已经公开的历史,影响其他协作者的本地仓库。更安全的做法是使用 git revert。它会生成一个新的提交,用来抵消指定提交带来的改动,历史记录保持连续,其他人正常拉取也不会出问题。

举个例子,如果某一次提交引入了一个错误,找到那次提交的哈希值前几位,执行 git revert 加哈希值,就会生成一笔反向提交,再正常推送就完成了撤销。需要撤销连续多笔提交时,可以按时间倒序依次 revert,或者一次性指定一个范围。

五、误删分支和提交的补救方法

误删分支之后不要急着重新写代码,先试试 git reflog。它记录了 HEAD 每一次移动的位置,包括提交、切换分支、重置等操作。从记录中找到误删分支最后一次提交的哈希值,再用 git branch 新分支名 哈希值,就可以把分支恢复出来。

同样的道理,用 reset --hard 改错了之后,也可以通过 reflog 找到之前的提交,再 reset 回去。只要提交过一次并且 reflog 记录还没有过期,大多数误操作都有补救的机会。平时也要记得,重要的分支不要在本地轻易删除,推到远程的分支还有远程仓库这层保护。

六、几个容易踩的坑

第一,分清 git pull 和 git fetch。pull 相当于 fetch 再加 merge,会直接把远程的改动合并到当前分支;fetch 只下载远程的改动,并不做合并,适合先看清楚远程发生了什么,再决定怎么合并。重要的合并操作之前,先 fetch 看一眼往往更稳妥。

第二,提交信息不要只写修改或者更新。写清楚改了什么功能、修复了哪个问题、关联了哪个需求,以后定位问题时翻提交记录就能快速找到线索,节省大量的时间。

第三,不要在主分支上直接开发,也不要把账号密码、密钥之类的敏感信息写进提交里。敏感信息一旦推送到远程仓库,即使后面删除了提交,也可能已经留在历史记录和别人的本地仓库里,清理起来非常麻烦。

结语

Git 的命令看起来很多,但只要理解工作区、暂存区和本地仓库这三个区域,以及每条命令是在哪两个区域之间搬运改动,就能很快分清该用哪一条。平时多用 status 和 log 确认当前状态,遇到问题先查 reflog,大多数麻烦都能找到补救的办法。希望这份笔记能帮你把 Git 用得更踏实一些。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。