Git笔记

Git笔记
青夢Git笔记
Git工作流和命令
sequenceDiagram
title GIt工作流和命令
box Purple 本地仓库
participant A as 工作区
participant B as 暂存区
participant C as 本地分支
end
box 远程仓库(Github、Gitee等)
participant D as 远程分支
end
A ->> B: git add/mv/rm
B ->> C: git commit
C ->> D: git push
A ->> C: git commit -a
D -->> A: git pull/clone/rebase
D -->> C: git fetch
C -->> A: git checkout/merge
C --> B: git reset HEAD
B -->> A: git checkout
A ->> C: git diff HEAD
C ->> A: git diff HEAD
A ->> B: git diff
B ->> A: git diff
Git和SVN的区别
SVN:简单、集中,适合流程明确、团队小的项目。
Git:分布式、灵活,适合大型团队、多分支并行开发,对协作和容错要求高的项目。
| 对比点 | Git(分布式) | SVN(集中式) |
|---|---|---|
| 存储方式 | 内容寻址(K/V 数据库,基于哈希) | 文件增量存储 |
| 使用流程 | add → commit → push (更复杂) | 直接 commit (更简单) |
| 网络依赖 | 本地操作无需联网 | 必须依赖远程仓库 |
| 协作模式 | 每人一个完整仓库,可多远程 | 单一中央仓库 |
| 分支管理 | 轻量级,快速切换 | 较重,切换和合并操作慢 |
| 容错能力 | 远程挂了也能本地提交 | 远程挂了无法继续 |
1.存储方式不同
Git的版本库是在本地,而SVN的版本库是在远程服务器上。(版本库存放每次的提交记录,包括文件变动、提交人/时间、备注等等)
Git按照原数据的方式将文件的一个版本存入了一个类似于K/V数据库,而SVN是按照文件变化的方式进行一个存储。Git的内部有一个类似于K/V的数据库,把他理解为是一个Map<K.V>,我们将内容存储到Git的数据库内后,Git会返回一个key给我们,这个key是唯一的,相同内容始终对应相同 key,避免重复存储;而SVN每次提交会记录文件的差异(增删改),属于集中式的版本控制。
2.使用方式不一样
SVN 操作流程较少,学习门槛低;Git 的流程更复杂,但本地操作不依赖远程,灵活度高。
从本地把文件推送到远程服务,SVN只需要
commit,其他开发者执行update就能获取最新版本;而Git需要
add、commit、push三个步骤。使用SVN开发者只要把文件修改了,只要commit,其他开发人员就可以直接checkout下来,但是Git就不相同了,Git如果要从本地将修改后的文件提交进入远程仓库,再从远程仓库将其他开发者修改后的文件checkout下来需要以下几个步骤:- (1).首先把修改后的文件通过
add添加到我们的暂存区; - (2).然后通过
commit命令将暂存区的文件提交到历史存储区; - (3).最后通过
push命令将本地仓库的文件存入到远程仓库; - (4).要通过
clone命令将远程仓库的文件拉到本地仓库; - (5).通过
pull/fetch从远程仓库获取最新内容 - (6).最后通过
checkout切换分支或恢复指定版本的文件;
- (1).首先把修改后的文件通过
3.管理模式不一样
Git是一个分布式的管理系统,而SVN是远程集中式的管理系统,如果说SVN的远程仓库挂掉了,那我的本地项目再也不能做提交,也不能做分支的切换,也不能够干和版本管理相关的任何事情,这就是集中式管理的缺陷;
而Git是在项目本地内有一个Git仓库,也就是说在本地一个项目包含一个完整Git仓库,远程仓库能干的事情本地的Git仓库也能干,即使远程仓库宕机,本地依然可以。本地仓库和远程仓库通过四种主要传输协议相关联(本地协议、Http协议、SSH协议、Git协议)。Git还支持远程仓库里面的多个远程仓库。
Git解决冲突
常见的冲突场景,git merge <branch>、git pull、git rebase(pull的底层其实就是fetch+merge/rebase)
Git 解决冲突的核心就是 人工决定保留哪一部分修改 → 编辑文件 → 标记解决 → 完成合并。
避免冲突的最好建议:经常
git pull或git fetch,保持更新,减少大规模合并;小步提交,不要一次性改动太多文件;避免多人同时改动同一块代码;保持提交历史线性,减少复杂merge
查看冲突文件
1
git status
手动编辑冲突文件
删除
<<<<<<<、=======、>>>>>>>,保留最终想要的内容。1
2# 例如决定保留两者的结合
print("我是当前分支的代码 + 我是要合并进来的代码")标记为已解决
1
git add <conflicted_file>
完成合并
如果是
merge1
git commit
如果是
rebase1
git rebase --continue
扩展:
SVN
sequenceDiagram
title SVN工作流和命令
box Purple 本地工作副本
participant A as 工作区
end
box 集中式版本库(SVN Server)
participant B as 版本库
end
A ->> A: svn add/mv/rm
A ->> B: svn commit
B -->> A: svn update/checkout
A ->> A: svn diff
A ->> B: svn log
Git使用代理
在 Git 中设置代理:注意代理端口要修改成你的代理软件监听的端口。
全局 HTTP/HTTPS 代理
1 | git config --global http.proxy http://127.0.0.1:7890 |
如果代理是 socks5,改成:
1 | git config --global http.proxy socks5://127.0.0.1:1080 |










