# Git 基础知识 Git 是一个版本控制工具。它可以记录文件夹在不同时间点的状态,让我们知道改了什么、什么时候改的,也可以把本地内容同步到 GitHub 这样的远程仓库。 ## 三个核心位置 `工作区 workspace`: 你平时直接看到和编辑的真实文件夹,比如 Obsidian 里的 `.md` 笔记、图片、模板等。 `本地仓库 local repository`: 工作区里有一个隐藏目录 `.git` 后,这个文件夹就成为 Git 本地仓库。`.git` 里保存提交历史、分支、远程地址等信息。 `远程仓库 remote repository`: 放在 GitHub、Gitee 等平台上的仓库。比如: ```text https://github.com/Ki5ter/Obsidian.git ``` 本地仓库和远程仓库不是同一个东西。`commit` 只提交到本地,`push` 才会上传到远程。 ## 常见概念 `stage/index 暂存区`: 准备放进下一次提交的改动。可以理解为“这次 commit 我要带上的内容清单”。 `commit 提交`: 一次本地快照。提交后,Git 会记住当前这批改动。 `branch 分支`: 一条提交历史线。常见主分支名是 `main` 或 `master`。 `remote/origin`: 远程仓库地址的别名。通常把 GitHub 远程仓库命名为 `origin`。 `push 推送`: 把本地 commit 上传到远程仓库。 `pull 拉取`: 从远程仓库下载最新改动,并合并到当前本地分支。 `fetch 获取`: 只下载远程仓库信息,不自动合并。 ## 基本工作流程 1. 打开工作区,也就是要纳入版本控制的文件夹。 2. 执行 `git init`,把文件夹初始化成本地 Git 仓库。 3. 配置远程仓库,也就是添加 `origin`。 4. 修改、新增或删除文件。 5. 把改动加入暂存区。 6. 提交到本地仓库。 7. 推送到远程仓库。 对应命令: ```powershell cd "E:\Obsidian\OneDrive\Apps\remotely-save\MyNotes" git init git remote add origin https://github.com/Ki5ter/Obsidian.git git add . git commit -m "Initial Obsidian notes backup" git push -u origin main ``` 如果当前分支叫 `master`,推送命令也可以是: ```powershell git push -u origin master ``` ## main 和 master `main` 和 `master` 都可以作为主分支名。 现在 GitHub 新仓库通常默认使用 `main`,旧仓库或某些工具可能默认使用 `master`。 把当前分支改名为 `main`: ```powershell git branch -M main ``` 第一次推送并设置上游分支: ```powershell git push -u origin main ``` `-u` 的意思是把本地分支和远程分支关联起来。设置过一次后,以后可以直接使用: ```powershell git push git pull ``` ## 常用检查命令 查看当前仓库状态: ```powershell git status ``` 查看当前分支: ```powershell git branch ``` 查看本地分支和远程分支关系: ```powershell git branch -vv ``` 查看远程仓库地址: ```powershell git remote -v ``` 查看提交历史: ```powershell git log --oneline --decorate -5 ``` ## Obsidian 笔记库使用 Git 的注意事项 Obsidian 笔记库适合用 Git 备份,因为大多数内容都是 Markdown 文本文件。 建议提交: ```text .md 笔记 图片、附件 模板 必要的 .obsidian 配置 ``` 谨慎提交: ```text 密码、密钥、Token 个人隐私内容 插件缓存 特别大的二进制文件 ``` 如果笔记库在 OneDrive 里,要注意 `.git` 目录必须真实保留在本机。否则 Git 或 Visual Studio 可能会报错,例如: ```text not a git repository Permission denied The cloud file provider is not running ``` 处理方式是在资源管理器里右键笔记库文件夹,选择: ```text 始终保留在此设备上 ``` 重点是整个笔记库和 `.git` 目录都要保留在本机。