# Git 命令速查

## 初始化和远端

初始化本地仓库：

```powershell
git init
```

添加远端仓库：

```powershell
git remote add origin https://github.com/Ki5ter/Obsidian.git
```

查看远端仓库：

```powershell
git remote -v
```

`origin` 是本地给远端仓库地址起的别名，也可以叫 `backup`、`gitee` 等。

## 日常提交

查看状态：

```powershell
git status
git status --short
```

加入暂存区：

```powershell
git add .
```

提交到本地仓库：

```powershell
git commit -m "提交说明"
```

第一次推送并绑定上游：

```powershell
git push -u origin master
```

绑定后日常推送：

```powershell
git push
```

## 分支和上游

查看当前分支和上游关系：

```powershell
git branch -vv
```

`master` 或 `main` 是分支名。`git push origin master` 表示把本地 `master` 分支推送到 `origin` 这个远端。

`-u` 会把本地分支和远端分支绑定起来。绑定后，Git 知道当前分支默认推送到哪里。

## .gitignore 和取消跟踪

`.gitignore` 只会阻止未被跟踪的新文件进入 Git。已经被 Git 跟踪的文件，需要先从索引中移除。

只取消 Git 跟踪，保留本地文件：

```powershell
git rm --cached -r -- "目录或文件名"
git commit -m "Stop tracking local-only files"
git push
```

`--cached` 指 Git 索引/暂存区，不是普通缓存。它不会删除本地实际文件。

## 清理历史中的敏感文件

如果密码、密钥、Token 已经提交过，只从最新提交删除还不够，历史里仍然能看到。应先更换或吊销泄露过的密钥，再重写历史。

删除整个历史中的指定目录：

```powershell
git filter-repo --path "密码本/" --path "服务器迁移/" --invert-paths
```

如果不是 fresh clone，工具可能要求确认：

```powershell
git filter-repo --force --path "密码本/" --path "服务器迁移/" --invert-paths
```

`--path` 指定要匹配的路径；`--invert-paths` 表示反转选择，保留其他路径，删除这些指定路径。

`git filter-repo` 执行后可能会删除 `origin`，需要重新添加：

```powershell
git remote add origin https://github.com/Ki5ter/Obsidian.git
```

历史重写后强推远端：

```powershell
git fetch origin
git push --force-with-lease origin master
```

`--force-with-lease` 会先确认远端分支还停在本地记录的位置，避免覆盖别人新推送的提交。

检查历史里是否还存在指定目录：

```powershell
git log --all -- "密码本/" "服务器迁移/"
```
