1 新环境下 git 配置
设置账号
git config --global user.namegit config --global user.email设置代理
git config --global http.proxy http://127.0.0.1:10809git config --global https.proxy https://127.0.0.1:10809查看配置信息
git config --list2 如果在 vscode 中 commit 提交代码时会一直卡住
在vscode中commit提交代码时会一直卡住,转圈圈使用git bash可以正常commit,但是使用vscode提 - 掘金
3 基本语句
3.1 查看提交记录
git log
3.2 在当前目录下删除创建的 git 库
linux – rm -rf .git
windows – Remove-Item -Recurse -Force .git -ErrorAction SilentlyContinue
3.3 撤回到之前版本
git reset --hard id
3.4 强制提交当前版本
git push --force origin main
3.5 取消正在进行的 pull 拉取
git reset --merge
4 分支没有关联到主支的问题
4.1 关键原因分析
1. 本地分支的上游分支设置不同
- 当你创建一个本地分支时,如果用类似
git checkout -b mybranch origin/main这样的命令,会自动让mybranch跟踪(track)远程的origin/main分支。 - 但如果你创建分支时没有指定上游分支,比如直接用
git checkout -b mybranch,那它就不会自动关联任何远程分支,除非你手动设置(比如用git branch --set-upstream-to=origin/main mybranch)。 2. 远程分支同步情况 - 你本地看到的
origin/main是远程仓库main分支的“快照”,只有在你执行了git fetch或git fetch --all后才会更新。 - 如果你在某个分支下没有看到
origin/main,可能是你本地还没有 fetch 过,或者该分支没有设置跟踪origin/main。
4.2 结合截图说明

- 第一张图中,分支
Myupdate-Obsidian关联了origin/main,说明这个分支的上游分支(upstream)设置了origin/main,所以你能看到相关联的信息。

- 第二张图中,分支
Myupdate-littlechange没有关联origin/main,只显示了origin/Myupdate-littlechange,说明它的上游分支设置为origin/Myupdate-littlechange,而不是origin/main。
4.3 解决方法与建议
- 如果你想让某个本地分支也关联(track)
origin/main,可以执行:
git branch --set-upstream-to=origin/main 你的本地分支名或者切换到该分支后执行:
git branch -u origin/main- 如果你发现本地没有
origin/main,可以先执行:
git fetch --all这样会同步所有远程分支的最新状态。
4.4 总结
不同分支关联的远程分支不同,取决于你创建分支时的方式和后续的上游分支设置。你可以通过 git branch -vv 查看每个本地分支当前跟踪的远程分支,并用 git branch -u 或 git branch --set-upstream-to 修改关联关系。
如需进一步排查,建议用以下命令查看所有分支的跟踪情况:
git branch -vv这样能一目了然地看到每个分支当前关联的远程分支。
4.5 补充 - 如何取消跟踪呢?
4.5.1 取消本地分支对远程分支的跟踪
- 首先,查看当前分支的跟踪情况:
git branch -vv- 取消当前分支的跟踪关系(需切换到该分支):
git branch --unset-upstream或者指定分支名:
git branch --unset-upstream 分支名这样本地分支就不再跟踪任何远程分支了。
4.5.2 删除本地的远程跟踪分支(remote-tracking branch)
如果你想删除本地仓库中 remotes/origin/xxx 这样的远程跟踪分支引用,可以用:
git branch -dr origin/分支名这只是删除本地的远程分支引用,不影响远程仓库。
5 分支的残留处理
5.1 清理本地的远程分支引用
- 执行以下命令,同步远程分支的最新状态并清除本地已被远程删除的分支引用:
git fetch -p或者
git remote prune origin这两个命令效果相同,都会删除本地仓库中那些在远程已不存在的分支引用,让本地和远程状态保持一致。
5.2 步骤总结
- 查看所有远程分支引用:
git branch -r- 清理已被远程删除的分支引用:
git fetch -p或
git remote prune origin- 再次查看,确认已被清理:
git branch -r这样,你本地就不会再看到那些远程已删除的分支了。
6 git revert 的使用
git revert只影响提交内容,不会删除任何分支。分支的存在与否需要你手动管理- 如果你不再需要“自动合并文章分支到主支”对应的分支,可以用以下命令删除本地和远程分支:
# 删除本地分支 git branch -d <分支名># 如果未合并或强制删除 git branch -D <分支名># 删除远程分支 git push origin --delete <分支名>这样做的优势: 保证了主支的线性历史和可追溯性,任何撤销操作都有记录,方便后续调试和团队协作 不会丢失历史信息,也不会影响其他已经合并的内容
7 添加忽略到.gitignore 不生效的问题 (以.obsidian 文件为例)
-
修改
.gitignore(写好.obsidian相关规则,比如忽略大部分,只保留某些子目录或 data.json 等)。 -
清理索引中当前的
.obsidian记录:git rm -r --cached .obsidian -
重新按新规则把
.obsidian加回索引(只会加回未被忽略的那部分):git add .obsidian -
把
.gitignore本身也加入暂存区(如果刚才修改过):git add .gitignore -
提交:
git commit -m "chore: apply .gitignore to .obsidian" -
推送:
git push
这样做的效果是:
- 被
.gitignore忽略的.obsidian文件会在这次提交中“从仓库删除”(云端最新版本不再有它们)。- 没被忽略的那部分(你用
!放出来的目录或文件)会继续被跟踪并保留在云端。
8 git 追踪和未追踪
在 Git 中,“追踪”(已跟踪)和“未追踪”(未跟踪)是文件的两种核心状态:
8.1 已追踪(Tracked)
- 定义:已追踪的文件是指那些已经被 Git 纳入版本控制的文件,即在上一次提交(快照)中已经存在的文件 [^1][^9]。
- 特点:
- 这些文件的变更会被 Git 记录和管理。
- 它们可能处于“未修改”、“已修改”或“已暂存”状态。
- 对于已追踪文件,Git 会持续监控其内容的变化,并在 git status 中显示其最新状态 [^1]。
8.2 未追踪(Untracked)
- 定义:未追踪的文件是指那些在你的工作目录中存在,但还没有被 Git 纳入版本控制的文件
- 特点:
- 这些文件不会被包含在版本历史记录中,也不会被提交到仓库
- 新建的文件默认是未追踪,除非你用
git add命令明确告诉 Git 开始追踪它们 - 在git status输出中,这些文件会被列在 “Untracked files” 部分。
8.3 状态转换
- 新建文件 → 默认是未追踪
- 执行
git add 文件名→ 变为已追踪(进入暂存区) - 已追踪文件如果用
git rm --cached 文件名处理后,会变回未追踪状态 [^2][^9]
8.4 .gitignore 的作用
.gitignore文件用于指定哪些文件或目录应该被 Git 忽略,即使这些文件存在于工作目录中,也不会被 Git 追踪- 但注意:
.gitignore只对未追踪的文件有效,对已追踪的文件无效