git协作开发

文章目录

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命令

  1. 查看分支

    复制代码
    git branch

    查看远程分支

    复制代码
    git branch -r

    查看所有分支

    复制代码
    git branch -a
  2. 切换分支

    复制代码
    git checkout 分支名

    复制代码
    git switch 分支名
  3. 删除本地分支

    复制代码
    git branch -d feature/xxx

    删除远程分支

    复制代码
    git push origin --delete feature/xxx
  4. 查看提交记录

    复制代码
    git log --oneline --graph --all

    能看分支合并历史,如果发生事故,也可以从log里进行代码找回

  5. 临时保存当前改动

    有时候你代码写一半,但要切分支:

    复制代码
    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,尽量每天进行一次合并

冲突解决完成后,最好重新运行项目,确认功能正常,再推送。因为很多时候冲突虽然解决了,但代码逻辑可能被破坏

相关推荐
smachao2 小时前
Redis Desktop Manager(Redis可视化工具)安装及使用详细教程
redis·git·bootstrap
szcsun54 小时前
git的常用命令
git
jian110584 小时前
android studio 解决git用户名和用户邮箱不一致的问题
git
jian110584 小时前
Mac git配置账号和邮箱,可以修改
git·macos
笨笨饿7 小时前
博客目录框架
c语言·开发语言·arm开发·git·嵌入式硬件·神经网络·编辑器
Rabbit_QL8 小时前
【CI/CD】02_一次 git push 后发生了什么?CI 是怎么工作的
git·ci/cd
不会写DN9 小时前
Git 开发中最常用的命令与场景
大数据·git·elasticsearch
张二娃同学9 小时前
基于 Python 与 Tkinter 的猜数字游戏设计与实现:支持玩家猜数与 AI 反向推理
开发语言·git·python·游戏·开源
原来是猿9 小时前
Git【企业级开发模型】
git