«

大白话讲讲 git 里常用的几个高级操作是怎么回事

时间:2026-8-31 01:46     作者:独元殇     分类: 开发相关


🔔 RSS: https://www.ccgxk.com/rss.php(欢迎在 Folo、Feedly 等平台订阅️)❤️

永远承诺:本网站,所有字均为人工手敲!无一字为 AI 生成(除非标注)

欢迎关注我的公众号,名叫「串串狗小刊」

因为 git 要解决的问题很宏大!

Git 的复杂,不是设计失误,而是设计目的太硬核了。它要解决的问题是:一群互不信任的程序员,在不同的时区,用不同的电脑,改着同一个几十万行代码的项目,既要保证谁都不会丢代码,又要让每一行改动都能追溯到人、追溯到原因。

我今天简单回忆一下,一些 git 的知识点。虽然 git 平时就一个 push 就行了,尤其在 AI 时代,git 好像更没有什么用了,但是 git 它毕竟是一个很复杂的成熟的同步系统。

一般在 90% 的条件下,下面这 4 句足够了:

git pull
git add
git commit
git push

但这有点像买了一台相机,但是只用自动挡。 买了一台 iPhone ,但是只接打个电话。

我在创业中遇到的最大困难之一,就是”你不知道你不知道什么”。也就是说,你知道会遇到困难,但你没法提前知道那是什么困难。等真遇到了,通常为时已晚。 --- 匿名大哥

我就简单说说,git 的一些概念,具体学,你找 AI 去学。

合并

第一个高级命令是 git merge ,这个是合并的。你如果团队开发,各自开发各自的模块,小明开发小明的登录模块,小艺开发小艺的功能模块,各种的故事线,不干扰,最后合并会用到。

git merge main 一敲就合并了。

变基

这个略微有点危险。

主要是解决一个场景,比如你们团队开发登录功能,花了 3 天,但是隔壁团队开发的内容,提交上了 main,但是隔壁团队开发的内容和你们团队的有些代码冲突了。

为了解决冲突,怎么办?

变基的解决方案是 你先同步 main 的最新代码,然后把你开发的功能给追加到后面。(注意,变基 不会帮你合并冲突!谁容纳它会尝试,但是如果它无法判断的话,就需要你手动来解决了)

git rebase main

这样,起码在提交记录上,是一条线。。。

当然,这个属于是 奇淫技巧 ,,, 尽量避免这样,因为会把提交历史给变更了,造成很多的麻烦。

所以,一旦有冲突,一定要及时沟通。尽量使用安全的 merge 。

搞了变基后,强制覆盖 force-with-lease

你本地执行了【变基】,还没推送,因为服务器上的远程分支,还没被【变基】污染过,所以你发现提交需要当心一点。

因为【本地】和【服务器】两边的历史对不上。

于是你有两种方式来提交

# 一般的方式
git push --force

# 专门解决变基问题的方式
git push --force-with-lease

上面那个直接强制覆盖,是不妥的。

下面这个会检查服务器那边,有没有别人的新提交。。。 如果没人提交,那么就会覆盖。和 force 一样。

如果有别人提交了,那就会拒绝强制提交。。。 这样安全一点。。。 至于沟通,还是得你亲自跟你的队友沟通。。。 所以尽量一辈子都别用变基。太麻烦了。

临时储藏 stash

这个不是暂存,这个是..... 临时收起来的意思。

因为你自己在开发一个功能,但是老板要求,突然要去开发别的... 除了当前你的进度可能会冲突,而且你也不好把当前进度提交对吧?

那就 使用 git stash ,把当前的进度给收起来,把目录(或者说工作区)给弄干净。先干完活儿再说。

git stash
git switch main  # 干完活,再切换回来

差不多就这样。

最顺手的 rebase

这个我平时用的也不少。

它可以帮你任意的修改过去最近的提交。比如最近的 5 条。

git rebase -i HEAD~5

然后就可以 pick(不变)reword (更改提交信息) edit (修改) squash (与上一个提交合并,保留提交信息) fixup (与上一个提交合并,删除提交信息)drop(删除)

amend 亡羊补牢大法

这个解决的问题是一个很常见的问题。

你在提交代码时,突然发觉有个小改动没有 add 进去。。。 那怎么办?再创建一个多余的提交吗?

不不不!

git add demo.js
git commit --amend --no-edit

使用 amend 可以帮你自动合并到到上一个提交里。。。 有点类似亡羊补牢。

但是,也不是没缺点。它会把上一个提交的哈希值给变了。这个得操点心。

其他的

git reset 这个是回退。比如年初 Claude code 把我的 数据库 删库了、、、

吓的我赶紧 :

git reset --hard,退钱!

虽然,也没有给我还原过来,但大家也知道它是干啥的了吧。。。

没推送的,可以回退,推送的就不好弄了。

然后 git reflog 是用来寻找旧提交编号的。。。

git revert 是用于让 远程服务器 来回退的。

差不多想起来的就这几个,大家还有实用的,可以补充一下!



标签: 原创 git