git学习记录
Git学习笔记
1. 安装
在官方网站安装: https://git-scm.com/
2. 初始化配置
1 | # 配置全局用户名和邮箱 |
3. 创建一个新仓库
1 | # 1. 初始化本地仓库 |
4. 工作区域和文件状态
Git中的三种工作区域
工作区(.git所在目录)
- 在资源管理器中看到的目录
暂存区(.git/index)
- 用于保存即将提交到Git仓库的修改内容
本地仓库(.git/objects)
- Git存储代码和版本信息的主要位置
Git中的四种文件状态
5. 添加和提交文件
git status
查看仓库的状态
git add
将文件添加到暂存区
- 可以使用通配符:
git add *.txt
- 也可以使用目录:
git add .
git commit
提交到本地仓库
- 只提交暂存区中的内容,不会提交工作区中的内容
git log
查看仓库提交历史记录
- 使用
--oneline
参数查看简洁的提交记录
git ls-files
查看暂存区的内容
6. git reset回退版本
Git reset的三种模式
git reset --soft
- 回退到某个版本,保留工作区和暂存区的所有内容
git reset --hard
- 回退到某个版本,丢弃工作区和暂存区的所有内容
git reset --mixed
(默认参数)- 回退到某个版本,保留工作区的内容,丢弃暂存区的内容
7. 使用git diff查看差异
git diff
比较:工作区 🆚 暂存区
git diff HEAD
比较:工作区 + 暂存区 🆚 本地仓库
git diff --cached
/ git diff --staged
比较:暂存区 🆚 本地仓库
git diff <commit_hash> <commit_hash>
git diff HEAD~ HEAD
比较两个**提交(commit)**之间的差异
git diff <branch_name> <branch_name>
比较两个分支之间的差异
8. Git 删除文件命令
rm file; git add file
- 先从工作区删除文件
- 然后使用
git add
让 Git 追踪这次删除(即加入暂存区)
git rm <file>
- 同时从工作区和暂存区删除文件
git rm --cached <file>
- 只从暂存区删除文件,但保留工作区中的文件(文件依然存在本地)
git rm -r *
- 递归删除当前目录及子目录下的所有文件和文件夹
提示:删除文件后记得使用
git commit
提交更改!
9. gitignore忽略文件
常见忽略文件列表
- 忽略日志文件和日志目录
- 忽略所有
.class
文件 - 忽略所有
.o
文件(编译生成的中间文件) - 忽略所有
.env
文件(包含环境变量配置) - 忽略所有
.zip
和.tar
压缩包 - 忽略所有
.pem
文件(安全凭证)
一般应该忽略的文件类型
- 系统或软件自动生成的文件
- 编译产生的中间文件和结果文件
- 运行时生成的日志、缓存、临时文件
- 涉及身份、密码、口令、秘钥等敏感信息的文件
示例 .gitignore
文件内容
1 | # 日志文件 |
10. SSH配置
1 | # 1. 回到根目录 |
SSH通过HTTPS端口连接GitHub (解决网络问题)
当无法通过SSH默认端口访问GitHub时,可以通过HTTPS端口(443)绕过:
1 | # 编辑SSH配置文件 |
这种方法有效的原因:
- 许多公司和网络环境会阻止SSH的标准端口(22),但允许HTTPS端口(443)
- 这种方法仍使用SSH协议及其安全特性和密钥认证
- 通信通过通常允许的HTTPS端口传输,从而绕过防火墙限制
11. 关联本地仓库和远程仓库
git remote add <shortname> <url>
- shortname - 起一个短名字,一般都是origin
- url - 要关联的远程仓库地址
git remote -v
查看当前仓库所对应的远程仓库的别名和地址
git branch -M main
将本地仓库当前分支命名为main
- GitHub默认的主分支名称是main,而本地分支有时候默认是master
- 如果已经设置过默认分支为main,则不需要此操作
git push -u origin main
把本地分支和远程分支的main关联起来
- 全称是
git push -u origin main:main
- 将本地的main分支(冒号前)与远程main分支(冒号后)关联起来
- 名称一样可以省略一个
简化命令
- 关联后可以直接使用
git push
- 未关联则需使用
git push <remote_name> <local_branch_name>:<remote_branch_name>
拉取命令
- 关联后:
git pull
- 未关联:
git pull <remote_name> <local_branch_name>:<remote_branch_name>
- 省略时默认拉取origin的main分支
git pull
会自动合并,如有冲突需解决git fetch
是获取后不自动合并
12. 分支的基本操作
查看分支列表
1 | git branch |
创建分支
1 | git branch <branch-name> |
切换分支
1 | # 传统方式 |
合并分支
1 | git merge <branch-name> |
删除分支
- 已合并的分支:
1 | git branch -d <branch-name> |
- 未合并的分支:
1 | git branch -D <branch-name> |
提示:分支操作前,建议先查看当前分支状态:
git status
。合并前确保工作区干净,删除前确认无误。
13. 解决合并冲突
冲突说明
- 若两个分支修改了同一个文件的不同位置 → Git会自动合并 ✓
- 若两个分支修改了同一个文件的相同位置 → 发生冲突 ✗
解决冲突步骤
- 手动修改冲突文件,处理冲突内容
- 添加到暂存区
1
git add <file>
- 提交更改
1
git commit -m "解决合并冲突"
中止合并操作
如果不想继续合并,可使用以下命令中止合并过程:
1 | git merge --abort |
提示:合并冲突发生时,Git会标记冲突区域(如
<<<<<<<
,=======
,>>>>>>>
),你需要手动选择保留哪一部分内容。
14. 回退和Rebase
Git Rebase(变基)
命令格式
1 | git rebase <branch-name> |
作用
将当前分支的提交”转移”到目标分支的最新提交之后,重写提交历史。
Rebase vs Merge 区别
比较项 | git merge |
git rebase |
---|---|---|
历史记录 | 保留分支历史,产生合并提交 | 重写提交历史,线性、干净 |
可读性 | 可能出现分叉,历史分支交错 | 历史更线性,便于回顾 |
是否生成新提交 | 会生成一个合并提交 | 不会生成合并提交,重用原提交 |
冲突处理 | 只处理一次冲突 | 每次变基提交可能都需手动解决冲突 |
什么时候用什么?
使用
merge
:- 团队协作中保留分支历史
- 避免修改提交历史
- 合并已推送的公共分支
使用
rebase
:- 自己在本地整理提交历史
- 保持提交历史简洁、线性
- 合并前清理开发分支历史,提升可读性
小提示:
rebase
更适合个人分支开发阶段merge
更适合团队协作与主分支合并- 注意:不要对已经推送到远程的公共分支使用
rebase
,可能导致历史冲突!