






















理解这三个地方,你就懂了 Git 的一半:
git add),准备结账。git commit),文件就被永久记录在 .git 文件夹里了。虽然你配过了,但备忘一下:
# 设置名字和邮箱 (这是你的身份证)
git config --global user.name "Chow Ray"
git config --global user.email "[email protected]"
# [你的特殊配置] 强制使用 GPG 签名
git config --global user.signingkey <你的KeyID>!
git config --global commit.gpgsign true
# [你的特殊配置] 指定 GPG 程序路径 (Windows)
git config --global gpg.program "E:\Program Files (x86)\GnuPG\bin\gpg.exe"
这是你 deploy.sh 脚本背后的逻辑:
不知道现在改了啥?有些啥文件变了?
# 添加所有变化 (最常用)
git add .
# 或者
git add -A
# 只添加某个特定文件
git add content/posts/my-post.md
# -m 后面跟的是说明信息
git commit -m "新增了一篇关于 Git 的文章"
# [你的特殊用法] 带 GPG 签名 (如果你全局没开自动签名)
git commit -S -m "带签名的提交"
# 推送到远程仓库 (origin) 的主分支 (master)
git push origin master
写博客前必做! 防止和手机端的修改冲突。
这是新手最需要的救命药丸。
比如你把 config.yml 改乱了,想恢复成上次提交的样子:
git restore config.yml
# 或者旧写法: git checkout -- config.yml
把文件放进购物车了,想拿出来,但不删除文件内容:
git restore --staged config.yml
# 或者旧写法: git reset HEAD config.yml
刚 commit 完发现有错别字,或者少 add 了一个文件,不想多产生一条 commit 记录:
# 1. 修改文件并 git add (如果需要)
# 2. 运行修补命令
git commit --amend -m "这是修正后的提交信息"
放弃本地所有修改,强制回到远程仓库的状态(比如脚本跑崩了):
# 慎用!这会删除你所有未提交的稿子
git reset --hard origin/master
因为你的 themes/PaperMod 是子模块,这块要专门讲。
如果你换了新电脑,Clone 下来后发现主题文件夹是空的:
# 初始化并拉取子模块
git submodule update --init --recursive
如果你不想用小乌龟,想用命令行装 X:
# 1. 更新子模块到远程最新版
git submodule update --remote --merge
# 2. 回到根目录提交这个变化
git add themes/PaperMod
git commit -m "Update theme"
# 简略版,一行一条,看得很爽
git log --oneline --graph --decorate
# [你的特殊用法] 查看 GPG 签名状态
git log --show-signature -1
# 还没 add 的时候,查看改动
git diff
# 已经 add 了,查看将要提交的改动
git diff --staged
| 场景 | 命令 | 解释 |
|---|---|---|
| 开始工作前 | git pull | 从服务器拉取最新进度 |
| 看一眼情况 | git status | 现在的状态(红/绿) |
| 保存进度 | git add . | 全部放入暂存区 |
| 确认保存 | git commit -m "xxx" | 提交生成版本号 |
| 上传云端 | git push | 发送到 GitHub |
| 放弃修改 | git restore <文件> | 把文件恢复原状(慎用) |
| 修改上次提交 | git commit --amend | 修正上一次的 Commit 信息 |
| 查看签名 | git log --show-signature | 检查 GPG 签名是否成功 |
git pull (拉取) 和 git fetch (获取) 有什么不同?这是一个非常经典,也是最容易混淆的 Git 概念。
用一句工科男能秒懂的公式来解释:
git pull(拉取) =git fetch(获取) +git merge(合并)
想象你在网上买了一堆新书(GitHub 上的更新),寄到了你家楼下的智能快递柜(你本地的 .git 仓库隐藏目录)。
git fetch (获取):
git pull (拉取):
| 维度 | Fetch (获取) | Pull (拉取) |
|---|---|---|
| 动作对象 | 只更新 .git/ 数据库 | 更新 .git/ + 当前工作文件 |
| 对代码的影响 | 无 (你的代码纹丝不动) | 有 (你的代码会变) |
| 网络操作 | 下载数据 | 下载数据 |
| 是否可能冲突 | 绝不 | 可能 (如果两边都改了同一行) |
| 适用场景 | 想看看别人改了啥,但不想合并 | 确定没问题,同步最新进度 |
git pull。deploy.sh 脚本里用的就是这个。git fetch。git pull 报错了,提示冲突。git fetch,把远程的变化下载到本地数据库(但不合并)。origin/master (远程) 和 master (本地) 到底哪里不一样。对于个人博客,99% 的情况直接用 Pull 没问题;只有当你发现报错了,才需要用 Fetch 来进行“外科手术式”的排查。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。