1817 words
9 minutes
0
0
Learning and using Git——Git的学习使用
2025-06-12
2025-11-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

查看配置信息

git config --list

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 不生效的问题 (以.obsidian 文件为例)#

  1. 修改 .gitignore(写好 .obsidian 相关规则,比如忽略大部分,只保留某些子目录或 data.json 等)。

  2. 清理索引中当前的 .obsidian 记录:

    git rm -r --cached .obsidian

  3. 重新按新规则把 .obsidian 加回索引(只会加回未被忽略的那部分):

    git add .obsidian

  4. 把 .gitignore 本身也加入暂存区(如果刚才修改过):

    git add .gitignore

  5. 提交:

    git commit -m "chore: apply .gitignore to .obsidian"

  6. 推送:

    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 只对未追踪的文件有效,对已追踪的文件无效
Learning and using Git——Git的学习使用
https://xieyi.org/posts/learning-and-using-gitgit的学习使用/
Author
謝懿Shine
Published at
2025-06-12
License
CC BY-NC-SA 4.0