1966 字
10 分钟
git备忘

官网

git配置#

基础信息#

Terminal window
git config --global user.email "you@example.com"
git config --global user.name "Your Name"

HTTP代理#

Terminal window
#端口不定看你设置
git config --global http.proxy "http://127.0.0.1:<7890>"
git config --global https.proxy "http://127.0.0.1:<7890>"
git config --global http.proxy "socks5://127.0.0.1:<1080>"
git config --global https.proxy "socks5://127.0.0.1:<1080>"
#取消设置
git config --global --unset http.proxy
git config --global --unset https.proxy

SSH#

ssh来鉴权最好,比http协议安全的多密钥也方便管理

~/.ssh/config
Host github.com
HostName ssh.github.com
Port 443
User git

git使用#

git工作流程

工作区 (修改文件)
→ git add →
暂存区 (准备提交)
→ git commit →
版本库 (永久保存)

基本命令#

Terminal window
#git初始化,在当前文件中添加一个.git目录,里面存着所有与git有关的东西
#如果fork过来的项目不让你设置成私有仓库可以考虑把这个目录删了然后再重新git init
git init
#查看git的状态
git status
#添加某个或者某个路径下的所有文件到暂存区
git add <path>
#交互式添加到暂存区
git add -p
#删除.env的git监控,但不删除本地文件
git rm --cached .env
#提交至版本库
git commit [-m] ["description"]
#回退版本默认是mixed模式,工作区保留,暂存区不保留
git reset HEAD^
# 从暂存区移除filename.txt,工作区保留
git reset filename.txt
#查看暂存区和工作区的不同
git diff
#比较工作区和版本库的区别
git diff HEAD^
#比较暂存区和版本库的区别
git diff --cached
#比较两个版本之间的区别
git diff <版本1的id> <版本2的id>
#可以比较文件的变化
git diff <文件名>
# 查看提交历史
git log
# 查看简洁版的提交历史
git log --oneline
#查看当前版本库中的所有文件
git ls-files
#删除path对应的文件从工作区,并把这个改动添加至暂存区
git rm <path>
#用http的方式的话要输用户名密码,但密码是GitHub的Personal access tokens
git push [origin] [分支名]
git pull

git分支控制#

创建分支#

Terminal window
# 创建分支
git branch feature/new-feature
# 切换到新分支
git checkout feature/new-feature
# 或者使用 switch
git switch feature/new-feature

查看分支#

Terminal window
# 查看本地分支(当前分支前会有 * 标记)
git branch
# 查看所有分支(包括远程)
git branch -a
# 查看分支及其最近提交
git branch -v

合并分支#

方式一:快速合并(Fast-forward Merge)#

适用于要合并的分支是当前分支的直接下游:

Terminal window
# 1. 切换到要合并的目标分支(通常是主分支)
git checkout main
# 2. 确保工作目录是干净的
git status
# 3. 合并分支
git merge feature/new-feature
# 4. 删除已合并的分支(可选)
git branch -d feature/new-feature

方式二:普通合并(创建合并提交)#

Terminal window
# 禁用快速合并,总是创建合并提交
git merge --no-ff feature/new-feature

方式三:压缩合并(Squash Merge)#

Terminal window
# 将分支的所有提交压缩成一个提交再合并
git merge --squash feature/new-feature
git commit -m "合并 feature/new-feature 的功能"

解决合并冲突#

当合并时出现冲突:

Terminal window
# 1. 查看冲突文件
git status
# 2. 打开冲突文件,手动解决冲突
# 冲突标记示例:
<<<<<<< HEAD
当前分支的内容
=======
要合并的分支的内容
>>>>>>> feature/new-feature
# 3. 标记冲突已解决
git add 文件名
# 4. 完成合并
git commit

完整的工作流程:#

Terminal window
# 1. 基于主分支创建功能分支
git checkout main
git pull origin main
git checkout -b feature/user-authentication
# 2. 在新分支上开发
git add .
git commit -m "添加用户登录功能"
# 3. 切换回主分支并拉取最新代码
git checkout main
git pull origin main
# 4. 合并功能分支
git merge feature/user-authentication
# 5. 推送合并后的代码
git push origin main
# 6. 删除本地功能分支
git branch -d feature/user-authentication
# 7. 删除远程功能分支(如果存在)
git push origin --delete feature/user-authentication

.gitignore#

直接就把路径一行行写进去就行#是注释比如:

.gitignore
# build output
dist/
# generated types
.astro/
# dependencies
node_modules/

git的其他小知识#

问AI的

基本概念#

HEAD#

  • 当前所在的分支的最新提交
  • 是一个指针,指向你当前的工作位置
  • 可以理解为”你正在哪里工作”
Terminal window
# 查看HEAD指向的提交
git show HEAD
cat .git/HEAD

区别对比#

HEAD^ (插入符)#

  • 指向父提交
  • 主要用于合并提交的场景
Terminal window
HEAD^ # 第一个父提交
HEAD^2 # 第二个父提交(合并提交时)

HEAD~ (波浪符)#

  • 向上回溯指定代数的提交
  • 主要用于线性历史
Terminal window
HEAD~ # 向上回溯1代(等同于HEAD^)
HEAD~2 # 向上回溯2代
HEAD~3 # 向上回溯3代

实际示例#

假设提交历史如下:

A - B - C - D (HEAD)
Terminal window
HEAD # 指向提交 D
HEAD^ # 指向提交 C (D的父提交)
HEAD~ # 指向提交 C (等同于HEAD^)
HEAD~2 # 指向提交 B
HEAD~3 # 指向提交 A

合并提交的特殊情况#

对于合并提交:

B - C (feature)
/ \
A - D - E - M (HEAD, 合并提交)
Terminal window
HEAD # 指向合并提交 M
HEAD^ # 指向 E (第一个父提交)
HEAD^2 # 指向 C (第二个父提交)
HEAD~ # 指向 E (等同于HEAD^)
HEAD~2 # 指向 D

常用命令示例#

Terminal window
# 查看上一个提交
git show HEAD^
git show HEAD~
# 查看上上个提交
git show HEAD^^
git show HEAD~2
# 重置到上一个提交(保留工作区)
git reset HEAD^
# 重置到上上个提交(保留工作区)
git reset HEAD~2
# 比较当前与上一个提交的差异
git diff HEAD^ HEAD

记忆技巧#

  • ^ - 像分支一样”分叉”,用于处理多个父提交
  • ~ - 像直线一样”回溯”,用于线性历史
  • 数字 - ^后面的数字表示第几个父提交,~后面的数字表示回溯几代

等价关系#

Terminal window
HEAD = HEAD~0
HEAD^ = HEAD~1
HEAD^^ = HEAD~2
HEAD^^^ = HEAD~3
HEAD^2 # 没有等价的~表示法(特殊场景)

教学视频#

git remote#

远程仓库位置#

在仓库的code那里点进去可以取到http、ssh的仓库位置,示例: HTTP:https://github.com/saicaca/fuwari.git SSH:git@github.com:saicaca/fuwari.git

SSH鉴权#

就和你连接别的服务器的ssh一样,在github用户设置那里放个公钥,需要权限的电脑的~/.ssh/config里配置一下github的连接用对应的私钥就可以了 生成密钥对的方法可以看ssh的文章,那里config也有例子

Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/github_id_ed25519

建立与远程仓库的连接#

  • git remote -v: 列出所有连接的远程仓库及 URL(最常用)。
  • git remote add <名字> <地址>: 添加一个新的连接(如 git remote add upstream ...)。
  • git remote remove <名字>: 删除连接。
  • git remote rename <旧名> <新名>: 改个名字。
  • git remote set-url <名字> <新地址>: 修改仓库地址(比如从 HTTPS 改成 SSH)。

拉取和推送代码#

  • git fetch <远程名>: 最安全的同步方式。它把远程仓库的最新内容下载到你本地的 .git 隐藏文件夹里,但不会动你的代码文件。
  • git push <远程名> <分支名>: 把你本地的 commit 传给远程仓库,并更新该分支。
  • git pull <远程名> <分支名>: 等于 git fetch + git merge。它直接下载并把改动“合并”进你当前打开的分支。 拉取完了就可以合并了

git提交记录#

前缀全称使用场景
featFeature新功能
fixFix修 Bug
docsDocumentation文档更新
styleStyle格式调整。不影响代码逻辑的改动
refactorRefactor重构
perfPerformance性能优化
choreChore杂事。改 .gitignore、配置 Docker、改依赖包版本。
可以在前缀的后面加个(),里面写更改的模块名,可以在github上观察一下大型开源项目的提交记录如何编写的,不过也说不准,其实最终还是全看你自己
git备忘
https://blog.cannian.space/posts/2025-10-16-git/
作者
Cannian
发布于
2025-10-16
许可协议
CC BY-NC-SA 4.0