Git 用久了也会遇到这种事。一个文件刚 git add,转头发现还得改一行,结果 git diff 和 git diff --staged 各显示一截。碰到这里,可以翻《Pro Git》第 2 章,顺手在空仓库里重做一遍。
下载中文版电子书
下面两份都是《Pro Git》第二版的简体中文电子书,来自翻译项目的 2.1.80 发布。这个数字是电子书构建的发布标签。
临时查某一节,打开 Git 官网目录更快。想换格式,可以回到翻译项目的发布页,在 Assets 里选文件。 Git 官网中文在线版 · 简体中文电子书发布页
已经 add 了,怎么撤回又留着改动
先读第 2 章的「记录每次更新到仓库」和「撤消操作」。看书时可以把编辑器里当前的文件和暂存区里的副本分开想。git add 放进去的是执行命令那一刻的内容,后来编辑的部分要再加一次才会进入下次提交。 《Pro Git》第二版中文目录
手边有 Git 2.23 或更新版本的话,用 Git Bash、macOS 或 Linux 的终端,在一个新建的空目录里做这个小练习。它只用本地文件,不需要远程仓库。
git init
printf 'port=8080\n' > demo.conf
git add demo.conf
git -c user.name=Demo -c [email protected] commit --no-gpg-sign -m "Add demo config"
printf 'port=8081\n' > demo.conf
git add demo.conf
git status --short
git diff --staged -- demo.conf
第一次看状态时,M 在第一列,表示这次端口改动已经暂存。接着只撤掉暂存区里的改动。
git restore --staged -- demo.conf
git status --short
git diff -- demo.conf
再看状态,M 跑到了第二列。普通 git diff 还能看到 8080 改成了 8081,文件里的改动还在。--staged 在这里让 Git 只恢复暂存区,目标来源默认是 HEAD。 git restore 命令说明
分支合起来有点乱,就画一张图
接着翻第 3 章「分支的新建与合并」。可以在同一个练习仓库建一条分支,分别在两条分支上提交,合并前后各看一次 git log --oneline --graph --all。书里的分支图和终端里的提交对上以后,看到一个合并提交就知道该往哪两条线上找。 分支的新建与合并
如果问题已经变成“哪一笔提交改坏了”,跳到第 7 章的「使用 Git 调试」。 用 Git bisect 找出回归提交
《Pro Git》简体中文版下载,先弄懂暂存区和分支
https://java.li/archives/pro-git-zh-download
评论