1 新环境下 git 配置
设置账号
git config --global user.name “”git 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
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 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 不生效的问题
7.1 问题原因
这个错误发生是因为要忽略的文件存在三个不同的版本:
- HEAD 版本:最后一次提交的版本
- 暂存区版本:已经
git add
但未提交的版本 - 工作目录版本:当前文件系统中的版本
当这三个版本互不相同时,Git 不允许直接使用
git rm --cached
,因为它不确定你想保留哪个版本
7.2 解决方案
你有以下几种选择:
7.3 方案 1:强制移除(推荐)
git rm --cached -f .obsidian/plugins/recent-files-obsidian/data.json
-f
参数会强制执行移除操作,忽略版本差异。
7.4 方案 2:先暂存后移除
git add .obsidian/plugins/recent-files-obsidian/data.json
git rm --cached .obsidian/plugins/recent-files-obsidian/data.json
这样做会让暂存区内容与工作目录内容一致,然后就可以正常移除了。
7.5 方案 3:先提交后移除
git commit -m "Update data.json before untracking"
git rm --cached .obsidian/plugins/recent-files-obsidian/data.json
7.6 完整操作流程
推荐使用方案 1,完整流程如下:
# 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
中列出它