2028 字
10 分钟
git的学习使用
2025-06-12
2025-06-27

1 新环境下 git 配置#

设置账号

git config --global user.name “”
git config --global user.email

设置代理

git config --global http.proxy http://127.0.0.1:10809
git config --global https.proxy https://127.0.0.1:10809

2 在 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 fetchgit fetch --all 后才会更新。
  • 如果你在某个分支下没有看到 origin/main,可能是你本地还没有 fetch 过,或者该分支没有设置跟踪 origin/main

4.2 结合截图说明#

8698dd9c-fe2f-4ce2-ac77-b2e47590c204.png

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

2dba914a-8bc2-43cf-9173-6eefaf628249.png

  • 第二张图中,分支 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 -ugit 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 步骤总结#

  1. 查看所有远程分支引用:
git branch -r
  1. 清理已被远程删除的分支引用:
git fetch -p

git remote prune origin
  1. 再次查看,确认已被清理:
git branch -r

这样,你本地就不会再看到那些远程已删除的分支了。

6 git revert 的使用#

  • git revert 只影响提交内容,不会删除任何分支。分支的存在与否需要你手动管理
  • 如果你不再需要“自动合并文章分支到主支”对应的分支,可以用以下命令删除本地和远程分支:
Terminal window
# 删除本地分支 git branch -d <分支名>
# 如果未合并或强制删除 git branch -D <分支名>
# 删除远程分支 git push origin --delete <分支名>

这样做的优势: 保证了主支的线性历史和可追溯性,任何撤销操作都有记录,方便后续调试和团队协作 不会丢失历史信息,也不会影响其他已经合并的内容

7 添加忽略到.gitignore 不生效的问题#

7.1 问题原因#

这个错误发生是因为要忽略的文件存在三个不同的版本:

  • HEAD 版本:最后一次提交的版本
  • 暂存区版本:已经 git add 但未提交的版本
  • 工作目录版本:当前文件系统中的版本 当这三个版本互不相同时,Git 不允许直接使用 git rm --cached,因为它不确定你想保留哪个版本

7.2 解决方案#

你有以下几种选择:

7.3 方案 1:强制移除(推荐)#

Terminal window
git rm --cached -f .obsidian/plugins/recent-files-obsidian/data.json

-f 参数会强制执行移除操作,忽略版本差异。

7.4 方案 2:先暂存后移除#

Terminal window
git add .obsidian/plugins/recent-files-obsidian/data.json
git rm --cached .obsidian/plugins/recent-files-obsidian/data.json

这样做会让暂存区内容与工作目录内容一致,然后就可以正常移除了。

7.5 方案 3:先提交后移除#

Terminal window
git commit -m "Update data.json before untracking"
git rm --cached .obsidian/plugins/recent-files-obsidian/data.json

7.6 完整操作流程#

推荐使用方案 1,完整流程如下:

Terminal window
# 1. 强制移除跟踪
git rm --cached -f .obsidian/plugins/recent-files-obsidian/data.json
# 2. 确保 .gitignore 包含该文件
# 检查 .gitignore 是否已添加:
# .obsidian/plugins/recent-files-obsidian/data.json
# 3. 提交更改
git commit -m "Stop tracking recent-files-obsidian data.json"
# 4. 推送到远程
git push

完成后,这个文件就不会再出现在 Git 的跟踪中了,即使你本地继续修改它。

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 只对未追踪的文件有效,对已追踪的文件无效

8.5 总结表#

状态是否被 Git 记录是否会被提交如何变成该状
已 踪git add 已在仓库中 未追 否 否 新建文件或 git rm --cached

如果你想让某个文件不被 Git 管理,确保它是“未追踪”状态,并在 .gitignore 中列出它

git的学习使用
https://blog.fuxieyi.top/posts/git的学习使用/
作者
谢懿Shine
发布于
2025-06-12
许可协议
CC BY-NC-SA 4.0