Git分布式版本控制工具
11/24/2022
1、基本介绍
1.1 版本控制器分类
a、集中式版本控制工具
集中式版本控制工具,版本库集中存放在中央服务器,每个人工作时从中央服务器下载代码,必须联网才能下载。个人修改后然后提交到中央版本库。
举例:SVN和CVS
b、分布式版本控制工具
分布式版本控制系统,没有中央服务器,每个人的电脑都是一个完整的版本库,这样工作的时候,不需要联网,版本库在自己的电脑上。多人习作只需要将各自修改推送给对方,就能互相看到对方修改了。
举例:Git
1.2 SVN(过时)
1.3 Git
作者:Linux Torvalds
用途:帮助管理Linux内核开发的一个开放源码的版本控制软件
1.4 Git工作流程图
命令如下:
1、 add:添加,将代码添加到暂存区
2、commit:提交,将暂存区的代码提交到本地库
3、checkout
4、fetch/clone:
fetch:抓取,从远程仓库抓取代码到本地仓库,不进行任何合并
clone:克隆,从远程仓库克隆代码到本地仓库
5、push:推送,将本地库的代码推送到远程仓库
6、pull:拉取,从远程库拉取代码到本地库,自动合并(merge),然后放到工作区,相当于fetch+merge
2、Git安装与常用命令
储备知识:
ls/ll:查看当前文件目录
cat:查看文件内容
touch:创建文件
vi:vi编辑器
2.1 Git环境配置
2.1.1 下载与安装
下载地址:https://git-scm.com/
Git安装:
1、双击,按照提示默认安装(修改一下安装路径)
2、成功标识:电脑桌面右键显示如下菜单,表示安装成功
提示:
Git GUI Here:图形化界面
Git Bash Here:命令行工具
2.1.2 基本配置
1、配置用户名和email地址:
git config --global user.name "itcast"
git config --global user.email "hello@itcast"
2、查看配置信息
git config --global user.name
git config --global user.email
2.1.3 为常用指令配置别名
1、打开用户目录,创建.bashrc文件
方式一:直接到C盘的用户目录下去创建".bashrc"目录
方式二:打开Git Bash,通过命令的方式创建
touch ~/.bashrc
2、在.bashrc文件中输入如下内容
#用于输出git提交日志
alias git-log='git log --pretty=oneline --all --graph --abbrev-commit'
#用于输出当前目录所有文件及基本信息
alias ll='ls -al'
说明:
用户目录:wszpa就是一个用户目录
2.1.4 解决GitBash软吗问题
1、打开Git Bash执行下面命令
git config --global core.quotepath false
2、${git_home}/etc/bash.bashrc文件最后面加两行
export LANG="zh_CN.UTF-8"
export LC_ALL="zh_CN.UTF-8"
2.2 获取本地仓库
获取本地仓库的步骤:
1、在电脑的任意位置创建一个空目录(例如test),作为我们的本地仓库
2、进入这个目录,点击Git bash窗口
3、执行命令git init
git init
4、创建成功,生成.git
目录
2.3 基础操作指令
Git工作目录下对于文件的修改会存在几个状态,这些修改的状态会随着我们执行Git命令而发生变化。
2.3.1 查看修改的状态(status)
命令:git status
2.3.2 添加工作区到暂存区(add)
命令:git add 单个文件名|通配符
案例:将所有修改加入到暂存区
git add .
2.3.3 提交暂存区到本地仓库(commit)
命令:git commit -m '注释内容'
案例:
git commit -m 'add file file01.txt'
2.3.4 查看提交日志(log)
作用:查看提交记录
命令形式:git log [option]
- options
- --all:显示所有分支
- --pretty=oneline:将提交信息显示为一行
- --abbrev-commit:使得输出的commitId更短
- --graph:以图形的形式显示
2.3.5 切换版本
命令:git reset --hard commitID
-
- commitID可以使用
git-log
指令查看
- commitID可以使用
说明:git-log指令是常用指令的别名,在上面有配置。
查看删除记录:
git reflog:这个指令可以看到已经删除的提交记录。
2.3.6 添加文件至忽略列表
在工作目录中创建一个名为.gitignore
的文件,列出要忽略的文件模式。
# no .a files
*.a
# but do track lib.a, even though you're ignoring .a files above
!lib.a
# only ignore the TODO file in the current directory, not subdir/TODO
/TODO
# ignore all files in the build/ directory
build/
# ignore doc/notes.txt, but not doc/server/arch.txt
doc/*.txt
# ignore all .pdf files in the doc/ directory
doc/**/*.pdf
练习:基础操作
#####################仓库初始化######################
# 创建目录(git_test01)并在目录下打开gitbash
略 #
初始化git仓库
git init
#####################创建文件并提交#####################
# 目录下创建文件 file01.txt
略 #
将修改加入暂存区
git add .
# 将修改提交到本地仓库,提交记录内容为:commit 001
git commit -m 'commit 001'
# 查看日志
git log
####################修改文件并提交######################
# 修改file01的内容为:count=1
略 #
将修改加入暂存区
git add .
# # 将修改提交到本地仓库,提交记录内容为:update file01
git commit --m 'update file01'
# 查看日志
git log
# 以精简的方式显示提交记录
git-log
####################将最后一次修改还原##################
# 查看提交记录
git-log
# 找到倒数第2次提交的commitID
略
# 版本回退
git reset commitID --hard
2.4 分支
2.4.1 查看本地分支
命令:git branch
2.4.2 创建本地分支
命令:git branch 分支名
2.4.3 切换分支
命令:git checkout 分支名
注意:直接切换到一个不存在的分支上(创建并切换分支)
命令:git checkout -b 分支名
2.4.4 合并分支
一个分支上的提交可以合并到另一个分支
命令:git merge 分支名称
2.4.5 删除分支
不能删除当前分支,只能删除其他分支
命令:
git branch -d 分支名
删除分支时,需要做各种检查
git branch -D 分支名
不做任何检查,强制删除
2.4.6 解决冲突
当两个分支上对文件的修改可能会存在冲突,例如同时修改了同一个文件的通过一行,这时就需要手动解决冲突。
解决冲突步骤:
1. 修改文件中冲突的地方
2. 将解决完冲突的文件添加的暂存区(add)
3. 再提交到本地库
4. 具体操作不清楚的可以参考一下下面的详细操作流程
2.4.7 开发中分支使用原则和流程
分支使用远程和流程:
-
- master(生产)分支
线上分支,主分支
-
- develop(开发)分支
从master分支创建的,作为开发部门主要开发分支,开发阶段完成后,需要合并到主分支。
-
- feature(功能)分支
从develop分支创建,分支上的研发任务完成后,合并到develop分支。
-
- hotfix(补丁修复分支)
从master派生的分支,一般作为bug修复使用,修复完成后需要合并到master、test、develop分支。
-
- 其他分支
例如:test分支(用于代码测试)、pre分支(预上线分支)
3、Git远程仓库
3.1 常用的托管服务【远程仓库】
GitHub:https://github.com/国外代码托管平台,速度不稳定
Gitee: https://gitee.com/ 国内代码托管平台,速度快
GitLab: https://about.gitlab.com/ 搭建git私服
3.2 注册马云
3.3 创建远程仓库
仓库创建·完成后,可以看到仓库地址,如下图所示:
3.4 配置SSH公钥
- 生成SSH公钥
- ssh-keygen -t rsa
- 不断回车
- 如果公钥已经存在,则自动覆盖
- Gitee设置账号公钥
- 获取公钥
- cat ~/.ssh/id-rsa.pub
- 获取公钥
-
- 验证是否配置成功
- ssh-T git@gitee.com
- 验证是否配置成功
3.5 远程操作
3.5.1 添加远程仓库
此操作是先初始化本地库,然后与一创建的远程库进行对接。
命令:git remote add <远端名称> <仓库路径>
远端名称:默认是origin
仓库路径:从远端服务器设置
例如:git remote add origin git@gitee.com:wan-shizhen/git_test.git
3.5.2 查看远程仓库
命令:git remote
3.5.3 推送到远程仓库
命令:git push [-f] [--set-upstream] [远程名称 [本地分支名] [:远端分支名]]
-
- 远端分支名和本地分支名相同,则可以只写本地分支
git push origin master
- -f 表示强制覆盖
- --set-upstream推送到远端的同时并且建立起和远端分支的关联关系。
git push --set-upstream origin master
- 如果当前分支已经和远端分支关联,则可以省略分支名和远端名
git push
将master 分支推送到已经关联的远端分支。
- 远端分支名和本地分支名相同,则可以只写本地分支
查询远程仓库:
3.5.4 本地分支与远程分支的关系
- 查看关联关系我们可以使用
git branch -vv
命令
3.5.5 从远程仓库克隆
如果已经有一个远端仓库,我们直接clone到本地。
- 命令:git clone <仓库路径> [本地目录]
- 本地目录可以省略,会自动生成一个目录
3.5.6 从远程仓库中抓取和拉取
- 抓取命令:git fetch [remote name] [branch name]
- 抓取命令就是将仓库里的更新都抓取到本地,不会进行合并
- 如果不指定远端名称和分支名,则抓取有分支。
- 拉取命令:git pull [remote name] [branch name]
- 拉取指令就是将远端仓库的修改拉到本地并自动进行合并,等同于fetch + merge
- 如果不指定远端名称和分支名,则抓取所有远端分支,并更新到当前分支。
- 拉取指令就是将远端仓库的修改拉到本地并自动进行合并,等同于fetch + merge
- 拉取命令:git pull [remote name] [branch name]
- 拉取指令就是将远端仓库的修改拉到本地并自动合并,等同于fetch + merge
- 如果不指定远端名称和分支名,则抓取所有并更新当前分支
- 拉取指令就是将远端仓库的修改拉到本地并自动合并,等同于fetch + merge
注意:本地仓库要先关联一下远端名称
3.5.7 解决合并冲突
问题描述:A、B用户都从同一个远程仓库拉取代码,A用户修改file.txt文件后优先于B提交远程仓库,此时B也修改了file.txt文件。由于A优先提交到远程仓库,故B需要将远程仓库代码再次更新到本地仓库。但由于A,B都修改了file.txt文件的同一行。此时远程仓库代码与B本地仓库代码合并产生冲突。
解决方法:与本地仓库分支合并产生冲突的处理方法相同。
1. 修改冲突代码,提交到本地仓库
2. 重新push远程仓库
4、在Idea中使用Git
4.1 在Idea中配置Git
4.2 在Idea中操作Git
主要包括:
-
- 创建本地库
- 创建远程连接
- 本地库push远程库
- 远程库pull本地库
附:IDEA集成GitBash作为Terminal
集成成功后的效果图
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)