教程
Git详细教程(一):window系统下,使用Git进行项目管理和版本控制_window如何重启git代码仓库_美奇开发工作室的博客-CSDN博客
Git使用教程 - 龙恩0707 - 博客园
Git教程
Git Bash使用详细教程_心生未凉的博客-CSDN博客
用法
GitHub如何配置SSH Key_github ssh配置_前端向朔的博客-CSDN博客
https://www.php.cn/faq/484893.html#:~:text=“git commit”和“git,信息发送给远程库。
git pull 和 git fetch的区别? - 知乎

Git 基本操作 | 菜鸟教程

hepburn5年前 (2018-10-15)
git commit、git push、git pull、 git fetch、git merge 的含义与区别
- git commit:是将本地修改过的文件提交到本地库中;
- git push:是将本地库中的最新信息发送给远程库;
- git pull:是从远程获取最新版本到本地,并自动merge;
- git fetch:是从远程获取最新版本到本地,不会自动merge;
- git merge:是用于从指定的commit(s)合并到当前分支,用来合并两个分支;
$ git merge -b // 指将 b 分支合并到当前分支
git pull 相当于 git fetch + git merge。
忽略特殊文件
简单对比git pull和git pull –rebase的使用 - 散尽浮华 - 博客园
常用命令
Git 基本操作 | 菜鸟教程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
| # status
git status -h # view help
git status # 工作区变动的文件,还没有add进暂存区(stage area)
git status --ignored # 包含忽略的变动
# diff 比较差异
git diff <file> # 查看工作区与暂存区的差异
git diff --staged[or cache] # 查看暂存区与上一次提交的差异
git fetch origin # 比较前一定要先fetch,否则 Git 不知道远程有没有更新
git diff [dev] origin/dev # 本地库与远程库差异
git diff HEAD..origin/dev
git log HEAD..origin/dev
git diff <commit1> <commit2> <file>
git diff <commit_hash> <path/to/file> # 对比当前与某个特定版本
git diff HEAD^ HEAD # 上一版与最新版本库差异
git log <path/to/file>
git diff -w -b --ignore-blank-lines --ignore-cr-at-eol xxx
# rm 适用于后续不进行版本控制(相当于从版本库删除)
git rm --cached <file> # 从暂存区中移除跟踪(保留本地文件)
# add
git add 命令,告诉 Git 哪些文件的修改应该包含在下一次提交(commit)中。
git add [file1] [file2] ...
git add . # 当前目录下所有
git restore --staged <file> # 撤销add
git restore --staged . # 撤销所有add
git restore <file> # 恢复没有进行add操作的修改
git restore . # 全部恢复
git clean -fd # -f:强制清除 -d:包括未追踪的目录
# 提交
1、commit -m
2、push
git commit --amend # 修改上次提交的信息(尽量避免)
git commit --amend -m "新提交注释" # 直接修改
git push --force # 修改注释后使用
git reset --hard <commit_id> # 回退到某次提交
# tag管理
git log --oneline # 简短提交日志
git log --author=yufangjie --since=2025-04-12 [--until=xxx]
git tag <tag-name> <commit-hash> # 设置标签
git tag -l # 查看本地标签
git tag -d <tag-name> # 删除本地标签
git push origin xxx <tag-name> # 推送远程标签
git push origin --delete <tagname> # 删除远程标签,不加xxx
git push origin xxx --tags # 推送所有本地标签
git checkout <tag-name>
# 下载
fetch/pull
# 暂存修改
git stash # 暂存本地修改
git pull # 拉取远程更新
git stash pop # 恢复修改
git stash list # 多次stash列表
git stash apply stash@{0} # 特定stash
# 更新子模块
git submodule update --init --recursive
# 删除commit(**不建议**)
git reset --hard hash值 # 版本回退
git push origin xxx --force # 强制提交,可能需要取消Branch Protection
|
使用流程实例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
# 配置全局用户名和邮箱
git config --global -l
git config --global user.name "yufangjie"
git config --global user.email "yufangjie@create3dworld.com"
git clone <url> # 首次下载源码时
git pull origin xxx # 后续开发
git status --ignored # 所有变动
git diff # 比较差异
git rm -f --cached utils.py # 从暂存区撤回,并且不再跟踪
git add auto_calibration.py sweep_data_static.py # add所有本次需要提交的
git add -f xxx # add .gitignore files
git restore --staged <file> # 撤销add,放回工作区
git commit -m "add convert bmp2jpg additional"
git push
# 首次推送本地分支时常用的命令,设置默认上游分支
git push -u origin main # --set-upstream,把 origin/main 设置为本地 main 分支的“上游分支”
git log
git pull --rebase [origin xxx] # 把当前改动放在最新代码之后
git pull [origin xxx]
|
原则/最佳实践
git的七个重要基本原则-腾讯云开发者社区-腾讯云
https://www.zhihu.com/tardis/zm/art/382343109?source_id=1003
使用git的一些原则、好习惯和常用命令_git 使用的一些原则_爱博客大伯的博客-CSDN博客

https://github.com/XXHolic/blog/issues/16
Type
type 用于说明 commit 的类别,必须为以下类型的一种:
- feat: 新的功能
- fix: 修复 bug
- docs: 只是文档的更改
- style: 不影响代码含义的更改 (例如空格、格式化、少了分号)
- refactor: 既不是修复 bug 也不是添加新功能的代码更改
- perf: 提高性能的代码更改(优化相关,比如提升性能、体验)
- test: 添加或修正测试
- chore: 对构建或者辅助工具的更改,例如生成文档
gpt
在使用 Git 进行项目管理时,良好的提交习惯和最佳实践能极大提高项目协作效率、历史可读性和问题追踪效率。以下是精心整理的 Git 提交建议和最佳实践,涵盖命名规范、粒度控制、团队协作等方面👇
🧠 一、提交信息的规范写法(Commit Message)
1
2
3
4
5
| <type>(scope): <subject>
<body> # 可选,多行说明变更原因、影响、注意事项
<footer> # 可选,关联 issue 等
|
📚 常见 commit <type>
类型:
类型 | 含义 |
---|
feat | 新功能 |
fix | 修复 bug |
docs | 文档修改 |
style | 格式(不影响功能的修改,如空格、缩进) |
refactor | 代码重构(不引入新功能/修复) |
perf | 性能优化 |
test | 添加或修改测试 |
chore | 构建流程、辅助工具变更 |
🎯 示例:
1
2
3
4
5
6
7
| feat(api): add user registration endpoint
fix(login): correct password validation logic
docs(readme): add project setup instructions
refactor(utils): simplify date parsing logic
|
✂️ 二、提交粒度建议
✅ 推荐粒度控制:
- 一次提交只做 一件事:一个功能、一个修复、一个文档改动。
- 提交应尽量保持可回滚、可测试、逻辑完整。
- 拆分过大提交,避免“杂项提交”(如:fix several things, update all files 等)。
🔄 三、避免提交的内容
- ❌
.DS_Store
、thumbs.db
、.log
、临时文件。 - ❌
.env
、密钥、密码等私密信息。 - ✅ 使用
.gitignore
管理忽略列表。
🤝 四、团队协作中的实践建议
✅ 使用分支管理(建议使用 Git Flow 或 GitHub Flow)
main
/ master
: 生产稳定版本develop
: 日常开发主干feature/*
: 功能开发hotfix/*
: 线上紧急修复release/*
: 发布准备
✅ 合并前使用 PR / MR 审查代码(推荐设置强制 Review)
🧪 五、工具辅助建议
🚀 Bonus:常用 Git 命令清单
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| # 添加修改
git add file.py
# 查看状态和diff
git status
git diff
# 提交
git commit -m "feat: add xxx feature"
# 修改上次提交信息
git commit --amend
# 查看历史
git log --oneline --graph --all
# 回退到某次提交
git reset --hard <commit_id>
|
✅ 总结清单(提交前自检)
- 每次提交是否只做一件事?
- 提交信息是否符合规范并清晰?
- 是否误提交了敏感或无关文件?
- 是否已测试该提交不会引入问题?
- 是否已推送到正确分支?
分支管理
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
| git remote -v # 查看远程仓库地址
git remote show origin # 查看远程HEAD
git remote remove origin # 删除远程 origin
git remote add origin <url> # 重新添加远程地址
git push -u origin main # 首次推送并设置默认分支
# 关联远程库,只需要一次
git remote add origin git@github.com:yfjie/yfjie.github.io.git
git remote set-url origin git@github.com:your_username/your_repository.git # 修改仓库url
git remote rm origin # 删除
git remote add origin git@github.com:your_username/your_repository.git # 重新添加
# 查看远程分支
git branch -a
git branch -r # 只看远程分支
git fetch origin # 拉取远程仓库的所有更新
git symbolic-ref refs/remotes/origin/HEAD refs/remotes/origin/dev # 设置默认远程分支
git checkout -b dev # 创建 dev 分支
# 删除远程分支
git push origin --delete <branchName>
git push -u -f origin master # 删除之前内容(-f),并提交,第一次可以
# 分支结构图
git log --graph --oneline --all --decorate
git diff <分支1> <分支2> # 比较两个分支
# clone特定hash值版本
git clone https://github.com/tensorflow/tensorflow.git [new_dir]
cd tensorflow
git checkout 5f3b5c70a2a8c0dbbd3d1fbbf5e2f98e9b2ad089 # 注意代码覆盖
git checkout <commit_hash> -- <path/to/file> # 特定文件
|
FAQ
常见错误
error: Cannot delete branch ‘xxx’ checked out at ‘xxxx’_IT云清的博客-CSDN博客
Git删除远程master分支问题 - CodeAntenna
Git 提示fatal: remote origin already exists 错误解决办法_Ricky_Fung的博客-CSDN博客
git commit 命令出现“fatal: unable to auto-detect email address (got ‘******@.(none)’)错误_XH生信ML笔记的博客-CSDN博客
git pull的时候发生冲突的解决方法之“error: Your local changes to the following files would be overwritten by merge” - 菜鸟学飞ing - 博客园
Git冲突:commit your changes or stash them before you can merge._全速前行的博客-CSDN博客
文件跟踪类型
检查文件是否被忽略 | 他山教程,只选择最优质的自学材料
1
2
3
4
5
6
7
8
9
| #`pycharm 中为例`
白色 正常未变更 not staged
蓝色 正常已变更 modified
红色 未跟踪 Untracked
橘色 忽略跟踪 Ignored
|
辅助工具
Git差异并列显示 - nuccch - 博客园
git pull冲突
git pull
不会直接覆盖你工作区的未提交修改,但具体行为要看你的当前状态:
🛠 正确操作方式(推荐)
如果你担心被覆盖,推荐这么做:
1. 先提交本地修改
1
2
3
| git add .
git commit -m "WIP: 保存本地修改"
git pull
|
或者:
2. 使用 stash
暂存修改
1
2
3
| git stash # 暂存本地修改
git pull # 拉取远程更新
git stash pop # 恢复修改
|
分支指针
这是 Git 中分支指针(reference)的一些术语,分别代表了不同的意思,我们逐个解释下你看到的:
🌱 HEAD -> master
- 这是说当前
HEAD
(也就是你当前检出的分支)指向 master
分支。 - 通常表示你当前所在的分支是
master
。
HEAD 是一个特殊的指针,代表你当前工作的快照,它指向你当前所在分支的最新提交。
🌍 origin/master
- 表示远程仓库 origin 的 master 分支的最新提交。
- 它是你本地 Git 中保存的远程
origin
仓库中 master
分支的状态(本地缓存)。
你可以把它理解为:
“上一次我从远程仓库拉取时,origin/master 的状态是这样。”
🌍 origin/HEAD
- 表示
origin
仓库的默认分支(通常是 master
或 main
)。 - 它类似于远程仓库的“当前默认指向”,比如你访问 GitHub,一个项目默认显示的分支。
你可以用命令查看远程 HEAD 是哪一个分支:
示例输出:
HEAD branch: master
🧠 总结类比
名称 | 含义 |
---|
HEAD | 当前所在分支的指针 |
HEAD -> master | 当前 HEAD 指向 master,表示你当前在 master 分支 |
origin/master | 上一次拉取时远程仓库 master 的状态 |
origin/HEAD | 远程仓库默认分支(比如 origin/master ) |