文章目录
- [1. 账号独立](#1. 账号独立)
- 2.提交自己写的代码
- 3.合并好代码之后
- 4.若在分支合并时出现了冲突
- 5.常用git命令
- 6.git相关知识
-
- [git merge和git rebase](#git merge和git rebase)
-
- [git merge](#git merge)
- [git rebase](#git rebase)
- 总结
- Git和SVN的区别
- Git工作区的三大区域
- [git add / commit / push 区别](#git add / commit / push 区别)
- 什么是分支
- [git pull 和git fetch的区别](#git pull 和git fetch的区别)
- [git stash](#git stash)
- [git reset 和 git revert](#git reset 和 git revert)
-
- [git reset](#git reset)
- [git revert](#git revert)
- 7.注意
1. 账号独立
- 你用自己的 Git 账号(SSH key 或 HTTPS)推送提交。
- 队友用他自己的账号推送提交。
- 两个账号互不干扰,只要远程仓库权限允许,都可以操作。
2.提交自己写的代码
首先确保自己在分支上
git branch
若没有分支
git checkout main
git pull origin main
git checkout -b feature/xxx
然后在终端进行提交,例如:
git add .
git commit -m "继续完善网络层"
git push origin feature/netWork
然后在我们的git仓库里进行查看,进行分支的合并merge
若git上没自动弹出分支合并的提示,我们可以在git仓库里的Pull requests里点New pull request,base:main,compare是想进行合并的分支然后进行合并的创建
3.合并好代码之后
合并完之后,我们就可以切回自己的本地进行拉取然后在之前的分支或者新建分支写了
# 1. 切到主支
git checkout main
# 2. 拉最新
git pull origin main
# 3. 回到你的分支
git checkout feature/netWork
# 4. 把 main 合并进来
git merge main
新建分支的写法
git checkout -b feature/xxx
4.若在分支合并时出现了冲突
这里出现冲突我们不要慌,首先,尽量不要在git上直接进行代码合并,我们在本地改更加安全
先切到主支并拉最新的代码
git checkout main
git pull origin main
然后切到我们的开发的分支,并把最新的main合并到分支
git checkout feature/xxx
git merge main
一般git上有冲突这里也有,然后我们就
git status
查看有哪些文件冲突,然后在我们本地去进行修改,最后在进行提交
git add .
git commit -m "解决 main 合并到 feature/xxx 时的冲突"
git push origin feature/xxx
冲突解决完成后,最好重新运行项目,确认功能正常,再推送。
5.常用git命令
-
查看分支
git branch查看远程分支
git branch -r查看所有分支
git branch -a -
切换分支
git checkout 分支名或
git switch 分支名 -
删除本地分支
git branch -d feature/xxx删除远程分支
git push origin --delete feature/xxx -
查看提交记录
git log --oneline --graph --all能看分支合并历史,如果发生事故,也可以从log里进行代码找回
-
临时保存当前改动
有时候你代码写一半,但要切分支:
git stash切回来之后在恢复
git stash pop
6.git相关知识
git merge和git rebase
一句话: merge = 保留历史,rebase = 改写历史
团队协作中优先使用 merge 保证历史安全,rebase 仅用于本地整理提交记录。
git merge
是分叉结构,在进行使用时,如
git checkout feature
git merge main
会产生一个合并节点,在历史上是先分叉再合并的结构
优点
- 保留真实开发历史
- 安全(不会改历史)
- 团队协作最常用
缺点
- 提交记录变复杂,有很多的merge commit
git rebase
是线性结构,如:
git checkout feature
git rebase main
会把我们的提交挪到main的最新的后面,历史会像一条线一样顺下去
优点
- 提交记录非常干净(像一条直线)
- 更适合整理提交
缺点
- 会改写历史
- 如果已经 push,被别人拉过会容易炸
总结
所以团队协作都用merge,rebase一般只用于在本地提交
-
不能对已经push的公共分支做rebase,例如:
git rebase main git push --force会把别人的历史冲掉
Git和SVN的区别
- Git 是分布式版本控制
- SVN 是集中式版本控制
- Git 每个人都有完整仓库
- SVN 必须连服务器
优势:
- Git 更快
- Git 支持离线
- Git 分支更轻量
Git工作区的三大区域
工作区(Working Directory)
暂存区(Index / Stage)
版本库(Repository)
我们协作流程:
修改 ->git add -> git commit
git add / commit / push 区别
- git add:放入暂存区
- git commit:生成版本记录
- git push:推到远程仓库
什么是分支
分支是指向某个 commit 的指针,用来实现多版本开发。
为什么要用分支
- 并行开发
- 避免影响主分支
- 方便功能隔离
git pull 和git fetch的区别
- git fetch:只拉代码,不合并
- git pull:= fetch + merge
git stash
临时保存当前未提交修改,让工作区干净
git reset 和 git revert
git reset
本质是指针回移,会修改历史,只适用于本地还没push的情况
- 回退版本
- 会改历史
- 危险
三种模式
| 模式 | 作用 |
|---|---|
| --soft | 回退 commit,但保留代码(还在暂存区) |
| --mixed(默认) | 回退 commit + 取消 add |
| --hard | 彻底删除代码(不可恢复) |
git revert
- 新建一个"反向提交"
- 不改历史
- 安全
git revert 会生成一个新的提交,用来抵消某个历史提交的修改,而不会改变已有提交历史例如
假设历史是:
A -> B -> C
然后我们执行
git revert C
Git 会做一件事: 计算 C 做了哪些改动,然后生成一个反向操作
比如
- C 加了一行代码 -> revert 会删掉这行
- C 删了一行代码 -> revert 会加回来
7.注意
在和对友尽量不要改改相同文件的代码,以避免发生太多冲突
避免长期不同步main,尽量每天进行一次合并
冲突解决完成后,最好重新运行项目,确认功能正常,再推送。因为很多时候冲突虽然解决了,但代码逻辑可能被破坏