Git版本控制工具

发布时间 2023-09-21 19:36:21作者: 小曾Study平台

Git版本控制工具

一.简介

1、git是一款分布式的版本控制工具,使用git每台本地主机都可以作为一个本地库,每个本地库可实现资源的相互共享,也可以把本地库的资源推送到远程仓库中(码云、github),不同本地库可以作为一个节点,允许有多个节点之间实现资源共享,避免了单点故障。
2、与SVN区别在于,SVN是集中式版本控制,SVN没有本地仓库,每个版本库有唯一的URL(官方地址),每个用户都从这个地址获取代码和数据,并且必须联网,很容易出现单点故障,而git则可以实现分布式,每台主机都有一个本地仓库,每个本地仓库都可以做为一个服务器节点,可以保存文件修改版本,推送远程仓库进行更新,避免了单点故障的出现!

image-20230920090925327

​ 版本集中式管理(SVN)

image-20230920091030592

​ 版本分布式管理(git)

二、git命令

image-20230921083422671

  • 初始化git本地仓库(进入代码资源目录)
git init

image-20230920092530199

  • 暂未提交缓存区状态

image-20230920092901879

  • 把工作区中文件提交到暂存区
git add . #表示所有文件提交暂存区
git add [fileName] #指定文件提交暂存区
  • 已提交暂存区状态

image-20230920155114818

  • 查看文件状态
git status
  • 把文件提交到本地仓库
git commit -m "[提示信息]"  #提交所有的暂存区文件到本地仓库
git commit [fileName] -m "提示信息"  #提交暂存区指定文件到本地仓库
  • 查看本地仓库存在所有的文件
git ls-files
  • 查看未关闭窗口下的所有历史版本
git log #显示所有历史提交版本的详细信息
git log --pretty=oneline  #显示所有历史提交版本的第一行信息

image-20230920160640002

image-20230920160730620

  • 查看最近所有的历史版本信息
git reflog
  • 版本切换
git reset --hard HEAD^ #回退上一个版本  ^表示一个版本  ^^ 表示两个版本
git reset --hard HEAD~数字  #回退指定的前几个版本
git reset --hard 版本号(缩写4-5个字符)  #根据版本号回退到指定的历史版本

image-20230920161312605

  • 拉取本地仓库的文件
git checkout [fileName] #拉取本地仓库的指定文件
git checkout .  #拉取本地仓库的所有文件
  • 删除本地仓库的文件
git rm . #删除本地仓库的所有文件
git rm [fileName] #删除本地仓库的指定文件
  • 文件差异对比(本地仓库文件与工作区同名文件之间的差异对比)
git diff HEAD -- [fileName]

image-20230920164046309

  • 撤销暂存区文件
git reset HEAD [fileName](文件夹)
  • 拉取远程仓库的代码
git clone [远程仓库地址SSH/Http]

三、推送远程仓库(gitHub)

  • 首先注册gitHub账号登录并创建仓库

image-20230920173015874

image-20230920173258857

  • 生成SSH私钥和公钥
ssh-keygen -t rsa -C "邮件地址@youremail.com"

image-20230920173737793

  • 添加秘钥到github

image-20230920174641476

  • 复制SSH地址进行本地git绑定

image-20230920174940336

  • 检测SSH配置是否连接通
ssh -T git@github.com

image-20230920175357086

  • 绑定远程SSH地址
git remote add origin(别名) [SSH地址]
  • 创建分支
git branch -M [分支名]
  • 远程推送
git push -u origin[SSH地址别名] [分支名]

四、本地仓库分支操作

  • 查看本地分支列表
git branch [分支名]
  • 创建并切换本地分支
git checkout -b [分支名]
  • 合并分支(首先要切换到主分支上再进行合并分支,前提要在同一个仓库)
git merge [分支名] #合并分支到当前主分支
  • 合并不同仓库的分支
git merge [分支名] --allow-unrelated-histories #合并远程仓库分支到主分支
  • 重命名分支(M表示强制重命名)
git branch -m|-M [oldBranch] [newBranch]
  • 删除分支
git branch -d [分支名]

五、远程仓库分支操作

  • 查看所有分支包括远程分支
git branch -a
  • 推送本地分支到远程仓库(必须切换到同名分支工作区)
git push -u origin [远程仓库分支名]
  • 删除远程分支名
git push origin :[远程仓库分支名]
  • 拉取远程仓库到本地仓库(两步走)
1、git clone [仓库地址SSH/http地址] #工作区默认是指向并创建master分支。
2、git checkout [对应的远程分支] 或者 git checkout -b [本地仓库分支] origin/[远程仓库分支]#指定创建对应同名本地分支。
  • 同步远程仓库分支文件到本地分支(只能同步同名分支)
git pull origin [远程分支名] #pull指定的分支,前提是要合并当前分支。
git pull origin [远程分支名]:[本地分支名]  #同步远程分支文件到指定的本地分支
git pull #同步当前分支同名的远程分支
  • 绑定远程仓库地址
git remote add  [别名]   [SSH/http地址]  #一般别名设置为origin
  • 删除绑定远程仓库指定地址
git remote remove [别名]   #删除指定远程地址
  • 查看绑定远程仓库地址
git remote -v 

六、分支冲突

image-20230921140041638

  • 本地分支冲突(不同分支合并时)
本地不同分支,修改相同文件中同样位置,进行本地分支合并到主分支时出现的冲突。
解决:需要根据实际情况来解决分支。(修改主分支上的冲突文件) 然后进行add . -->commit -m ""提交到本地仓库,自动合并分支。解决冲突后的文件在主分支上,其他分支还是原状。
  • 远程分支冲突(相同分支推送时)
不同客户端拉取远程仓库中的文件,A客户端修改A分支代码并进行了远程提交,而B客户端在修改A分支代码之前没有执行同步远程分支操作(git pull),也修改了相同文件相同位置的代码,也进行远程提交,就产生了远程分支冲突。
解决:B客户端分支拉取远程仓库A分支中的代码,然后根据实际情况修改冲突文件中的文本,再重新提交远程仓库。

image-20230921141544057

  • 模拟本地冲突
1、新建一个文件夹
2、git init
3、编写一个test.txt文件
4、git add.
5、git commit -m "提交本地仓库创建master分支“
6、git checkout -b dev #创建并切换到dev分支
7、编写test文件中的内容
8、提交到本地仓库dev分支上
9、git checkout master
10、修改dev分支上相同位置的test文件
11、提交到本地仓库master分支上
12、git merge dev  #把dev分支合并到master分支上
  • 模拟远程冲突
1、新建两个文件夹 (文件夹A  文件夹B)
2、git clone [地址]  #分别拉取远程仓库文件
3、然后分别修改同一个分支相同文件中的相同位置。
4、同时或者其中一个文件夹先提交本地仓库。(先提交的没冲突,后提交的产生冲突)
5、然后后提交的文件夹进行git pull同步仓库,就产生冲突文件
  • 总结
为了尽可能排除远程仓库中分支冲突,我们在修改文件前应该先同步仓库(git pull),再进行修改代码最后提交远程仓库。
正确的操作流程:
1、首先 git clone  仓库地址  #拉取远程仓库到本地仓库
2、进入仓库文件夹
3、git checkout -b [分支] origin/[远程分支名]  #在本地创建本地仓库分支并切换该分支并把远程该分支文件加载
4、git pull
5、修改代码。
6、提交代码到远程仓库。

七、tag标签命令(压缩包)

image-20230921181031735

  • 创建标签
git tag [标签名]
  • 创建带注释的标签
git tag -a [标签名] -m  "注释信息"
  • 查看所有的标签
git tag
  • 推送单个标签
git push origin [标签名]
  • 推送所有未提交标签
git push --tags
  • 删除本地标签
git tag -d [标签名]
  • 删除远程标签
git push origin :refs/origin/[标签名]

八、IEDA集成git环境

  • 配置IDEA集成git设置

image-20230921151340514

image-20230921151417110

  • 打开IDEA情况下拉取远程仓库代码

image-20230921151858654

image-20230921152025786

  • 本地项目提交到远程仓库

初始化本地仓库 选择项目根路径下

image-20230921154958623

image-20230921155900180

提交项目到本地仓库 一般先提交.gitIgnore文件到本地仓库,再提交代码,可以过滤掉不需要提交的文件!

image-20230921160018060

image-20230921160302144

image-20230921161216460

image-20230921161547315

IDEA分支管理

image-20230921172857217

image-20230921173005123

image-20230921173254218

分支冲突处理界面 (处理完冲突会自动提交!)

image-20230921174346326

查看git日志

image-20230921180707288

如果不小心提交文件错了进暂存区

git reset HEAD [文件名]  #撤销暂存区文件提交