Skip to content

git简介

git是什么

Git是一个分布式管理控制系统,用于记录文件的修改历史

为什么要用Git

版本管理:方便随时进行修改和回退
团队协作:减少多人开发产生的冲突
功能分支:新功能可以新建分支,开发完后合并回来,互不影响

Git基本流程是怎样的

分支使用策略

分支作用
master随时可上线的分支
develop从master创建的分支,一般作为开发部门的主要开发分支,阶段开发完成后,需要合并到master分支上
feature从develop创建的分支,一般是同期并行开发,但不同期上线时创建的分支,分支上的研发任务完 成后合并到develop分支
hotfix从master派生的分支,一般作为线上bug修复使用,修复完成后需要合并到master、test、 develop分支

实际开发流程

  1. 入职第一天,管理人员分配/git账号密码
  2. 开发人员下载代码文档,根据文档搭建环境
  3. 接到第一个功能需求,创建feature分支
  4. 根据开发需求,进行本地测试
  5. 提交代码到当前需求对应的feature分支
  6. 合并分支至test分支,测试人员会在test分支中测试
  7. 测试人员测试bug ,开发者在feature分支上继续修、提交
  8. 测试人员测试通过 ,test分支会被测试人员合并到develop开发分支,再次测试
  9. develop分支最终会被合并到master主分支

git与svn的区别

特性GitSVN
核心架构分布式集中式
仓库存储每个开发者的本地都有一个完整的仓库,包含全部历史记录。只有一个中央仓库,存储在服务器上。
网络依赖不需要。大部分操作(如提交、查看历史、创建分支)在本地完成,可离线工作。强烈需要。几乎所有操作都需要与中央服务器通信。
操作速度本地操作极其快速,因为不涉及网络延迟。受网络速度和服务器性能影响,相对较慢。
分支模型轻量级分支。创建、切换、合并分支非常快速和廉价,鼓励工作流中使用分支。重量级分支。分支实质上是仓库的一个副本,创建和合并较慢、较复杂,通常避免频繁使用。
内容存储元数据方式。对文件内容做哈希,生成快照。相同内容只存储一次,非常高效。文件方式。存储每个文件的不同版本,默认存储前后版本的差异。
权限管理相对简单,通常依赖操作系统或仓库托管平台(如GitHub)的权限。非常精细。可以在目录和文件级别进行严格的读写权限控制,适合企业级管理。
学习曲线概念较多(工作区、暂存区、本地库、远程库),初学者上手有一定难度。概念相对简单(检出、更新、提交),易于初学者理解。
典型工作流每个开发者拥有完整的代码库,可以独立工作,然后通过推送和拉取来协作。开发者从中央服务器检出代码,工作后提交回中央服务器。

git pull与git fetch的区别

git fetch只下载,git pull下载并合并,git pull = git fetch + git merge

特性git fetchgit pull
工作方式只下载远程数据到本地下载 + 自动合并
影响范围不影响工作区和当前分支修改工作区和当前分支
安全性高 - 可先审查更改中 - 可能直接引入冲突
控制性完全控制合并时机和方式自动合并,控制较少
使用场景协作环境、审查更改前个人分支、确定要更新时

git merge与git rebase的区别

git merge = 保留历史,创建合并提交
git rebase = 重写历史,创建线性提交

特性git mergegit rebase
历史记录保留分支结构,显示合并点线性历史,隐藏分支
提交哈希不改变现有提交创建新的提交(哈希改变)
冲突处理一次性解决所有冲突可能需要在每个提交处解决冲突
安全性安全,不重写历史危险,重写历史
使用场景公共分支、发布分支本地特性分支整理

二、安装git

首先进入官网下载git,https://git-scm.com/download,点击install跳转到下载页

选择合适的版本下载,例如:Git for Windows/x64 Setup

查看安装版本

plain
git --version

初始化

plain
git init

配置新用户信息

安装成功后,需要先配置用户名和邮箱
假如我想创建一个名为djm,邮箱为1415847612@qq.com的用户

plain
git config --global user.name "djm"
git config --global user.name
git config --global user.email "1415847612@qq.com"
git config --global user.email

三、git操作

git一图流

创建新分支

创建新分支的本质是从当前分支克隆出一个分支出来

假设当前分支为main分支,需要新建的分支为dev

plain
//已在当前分支
git switch -c dev

//不在当前分支
git checkout main
git switch -c dev

//推送远程
git push -u origin dev

新文件提交

进行一次本地提交

plain
git add .
git commit -m "提交注释"

进行一次远程提交

plain
git add .
git commit -m "提交注释"
git push

回滚错误提交

方法适用场景是否改变历史风险等级
git revert已推送的提交、公共分支否(创建新提交)
git reset本地提交、未推送的更改是(重写历史)
git checkout临时恢复文件

暂存并切换分支

回滚到某一时刻

变基撤回

plain
git rebase --aborb

将多次提交合并成一次提交

同步远程分支

plain
git pull

合并分支

现在有两条分支,main分支落后,dev分支更新,需要合并两个分支

plain
git checkout main
git pull
git merge dev
git add .
git commit -m "合并dev分支到main分支"
git push

删除当前分支和远程分支

假设当前需要删除的分支为main分支

plain
//删除本地分支
git brach -D main
//删除远程分支
git push origin --delete main

查看日志

plain
git log --pretty=oneline --all --graph --abbrev-commit

查询分支

plain
git branch

追踪过的文件添加到.gitignore文件

三、远程仓库操作

创建远程仓库

注册码云-->新建仓库-->配置SSH公钥-->远程仓库添加公钥-->查看连接状态 -->

注册码云

新建仓库

配置SSH公钥

plain
ssh-keygen -t rsa //生成SSH公钥
cat ~/.ssh/id_rsa.pub //获取公钥
ssh -T git@gitee.com //验证是否配置成功

四、git报错修改

报错修改

plain
//Windows系统下在提交代码时自动将LF转换为CRLF
git config --global core.autocrlf true
//Linux/macOS系统下在提交代码时自动将CRLF转换为LF
git config --global core.autocrlf input