文章目录
Git简介
Git是一个开源的分布式版本控制系统,可以有效、高速地进行从很小到非常大的项目的版本管理。
Git是由Linux之父 Linus Torvalds 为了帮助管理 Linux 内核而开发的一个的版本控制软件。最后开源了。
它具有以下特点:
- 速度、简单的设计
- 对非线性开发模式的强力支持(允许成千上万个并行开发的分支)
- 完全分布式
- 有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量)
基本概念
- 本地仓库:在本地主机上的一个代码库,可以独立存在,也可以与远程仓库进行关联
- 工作区:对任何文件的修订(增删改),都先放在工作区,工作区不与任何仓库分支进行关联
- 暂存区:把修订的文件从工作区经过
add
(添加)后与某一个仓库分支进行关联,只有进入暂存区的文件才能commit
(提交)到本地仓库。可以理解为一个临时保存修改文件的地方。
- 远程仓库:在局域网或互联网上的一个主机,存放代码库的主机或平台,比如GitHub、Gitee.com(码云)
- 分支:代码存放在仓库的位置默认是主分支(
master
),也可以在主分支基础上创建许多子分支,比如develop
(开发分支)、bugfix
(bug修复分支)等。
一个文件目录在使用Git进行版本管理后,会生成一个隐藏文件夹 .git 来作为Git的工作目录。
.git 隐藏目录中存储了配置信息、日志信息、文件版本信息以及暂存区信息等文件。其中名为index
的文件就是暂存区,也可以叫做stage
。
Git工作流程图
本地仓库与远程仓库的直接交互流程图:
操作说明:
Clone
:克隆,从远程仓库中克隆代码到本地仓库。Push
:推送,代码完成后,需要和团队成员共享代码时,将代码推送到远程仓库。Pull
:拉取,从远程仓库拉取代码到本地仓库,并自动进行合并(merge
),最后存放到工作区。
本地仓库操作流程图:
操作说明:
checkout
:将本地仓库的内容检出到工作区add
:在提交前先将代码提交到暂存区commit
:提交到本地仓库
小结【太长不看点这里】
- Git解决的问题:
- 代码备份、还原;协同开发;多版本并行开发、问题代码追溯
- Git中的基本概念:
- 本地仓库:存储所有版本代码的一个仓库
- 工作区:编辑代码的地方
- 暂存区:存放准备提交的代码的地方
- 远程仓库:用于团队之间共享代码【枢纽】
- 分支:多个版本并行开发,
master
主分支,develop
开发分支,test
测试分支
- 本地仓库:存储所有版本代码的一个仓库
- Git的工作流程:
- 远程仓库操作:
clone
(克隆):第一次从远程仓库下载代码pull
(拉取):从远程仓库获取团队其他成员提交的代码push
(推送):将完成后的代码上传到远程仓库
- 本地仓库操作:
checkout
(检出):将本地仓库的内容检出到工作区add
(添加):向暂存区添加代码,准备提交commit
(提交):把暂存区的代码提交到本地仓库
- 远程仓库操作:
Git下载 & 安装
下载地址:https://git-scm.com/download
- 下载完成后打开安装文件,疯狂点击
next
使用默认配置安装即可。 - 安装完成后在桌面右键,如果出现下图两个菜单,则说明安装成功。
菜单说明:
- Git GUI:Git提供的图形界面工具
- Git Bash:Git提供的命令行工具
Git基本配置
基本配置
Git 安装完成后,在正式使用前需要进行一些全局设置,如用户名、邮箱。
直接在桌面右键点击Git Bash Here
即可进入命令行模式开始配置。
设置的主要命令:git config
# 设置全局用户名
git config --global user.name "your name"
# 设置邮箱
git config --global user.email "your email"
--global
指定为全局配置,不使用该参数,则为当前所在仓库配置。
通过以上命令设置的信息会保存在
.gitconfig
文件中,如果设置有误,可以删除该文件,重新进行设置。
构建本地仓库
要使用Git对我们的代码进行版本控制,首先需要构建本地仓库。
通常有两种方式:
- 直接在本地初始化一个Git仓库
- 从远程仓库克隆一个仓库
初始化本地仓库
- 在电脑的任意位置创建一个空目录,作为我们的本地Git仓库
- 进入这个目录中,鼠标右键打开
Git Bash
窗口 - 执行命令
git init
,如果在当前目录中看到.git
文件夹(此文件夹为隐藏文件夹)则说明Git仓库创建成功
添加文件至忽略列表
一般在工作区中,并非所有文件都需要纳入版本控制。
这种不需要进行版本控制的通常都是些自动生成的文件。比如:idea工程文件(springmvc.iml)、编译后文件target、系统上传的图片img。
在这种情况下,我们可以在工作目录中创建一个名为.gitignore
(文件名只能是.gitignore
)的文件,在这个文件中列出要忽略的文件,再将这个文件commit
到本地仓库中。
一般在工程初始化时,需要提前准备好忽略的文件列表。
分支管理
几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着你可以在不影响开发主线的情况下把你的工作从开发主线上分离出来,进行重大的Bug修改或开发新的功能。
在开发中,一般存在以下分支:
master
(生产) 分支:- 线上分支,主分支,中小规模项目作为线上运行的应用对应的分支;
test
(测试)分支:- 从
master
创建的分支,一般作为测试部门的测试分支,进行预发测试。 - 测试完成后,需要合并到
master
分支,进行上线,中小规模项目可省略此分支;
- 从
develop
(开发)分支:- 从
test
创建的分支,如果开发没有test
分支,则直接从master
创建,一般作为开发部门的主要开发分支 - 如果没有其他并行开发不同期上线要求,都可以在此版本进行开发
- 阶段开发完成后,需要合并到
test
分支继续测试,如果没有test
分支,也可以直接合并到master
分支。
- 从
hotfix(bugfix)
分支:- 从
master
派生的分支,一般作为线上bug修复使用,修复完成后需要合并到master
、test
、develop
分支。
- 从
★ Git常用命令
常用命令 | 说明 |
---|---|
git config --global user.name "用户名" | 设置全局用户名;--global 指定为全局配置,不使用该参数,则为当前所在仓库设置用户名 |
git config --global user.email "邮箱" | 设置全局邮箱 |
git config --global http.sslCAInfo "本地证书文件地址" | 设置全局SSL证书 |
git config --global alias.别名 原来Git命令 | 设置全局Git命令的别名(快捷命令) |
git config --list | 查看配置信息 |
git init | 在本地创建Git版本库 |
git status [-s] | 查看当前文件状态;-s :显示更简洁的信息 |
git add 文件名 | 将文件添加到暂存区;git add . :将当前目录下的所有文件添加到暂存区(除按规则忽略的以外); 空文件夹不会被添加到暂存区 |
git commit | 将暂存区中的文件提交到仓库中; 直接使用该命令会先弹出添加评论的页面; git commit -m '评论内容' :带评论提交,用于说明提交内容、变更、作用等 |
git log [--pretty=oneline] | 显示所有提交的历史记录;--pretty=oneline :单行显示所有提交的历史记录;在输出内容中,可以看到每次提交的 commit_id 是一个 40 位的字符串 |
git reset --hard commit_id | 回退到 commit_id 指定的提交版本 |
git rm 文件名 | 删除已经提交到版本库中的文件(直接删除本地文件);git rm --cached :删除已提交到本地仓库的缓存 |
git branch [-av] | 查看本地分支信息;-v :查看相对详细的本地分支信息;-av :查看包括远程仓库在内的分支信息;在输出内容中,前面带有 * 号的分支就是我们当前所在的分支 |
git branch 分支名 | 新建分支 |
git branch -d 分支名 | 删除本地分支 |
git push origin -d 远程仓库分支名 | 删除远程仓库分支 |
git checkout 分支名 | 切换分支 |
git checkout -b 分支名 | 新建并切换到该分支(合并以上两个命令) |
git switch 分支名 | Git 2.23版本后新增的命令,旨在替代原有的checkout 命令,专注于分支切换功能 |
git merge 分支名 | 合并分支; 合并前先切换回主分支再使用该命令,表示将该分支上修改的内容合并到主分支 |
ssh-keygen -t rsa | 生成公钥和私钥 |
git remote -v | 查看远程仓库;origin 是 Git 克隆的仓库服务器的默认名字 |
git remote add 远程仓库名 远程仓库地址 | 将本地仓库发布到远程仓库 |
git remote prune origin | 删除在远程仓库中不存在的本地分支 |
git push [-u] 远程仓库名 本地分支名 | 推送本地仓库的内容到远程仓库;-u :第一次推送时使用,可以把本地分支和远程分支关联起来,从而简化后续推送或拉取命令的使用;注意事项:推送前需要先 pull 远程仓库,以确保版本的一致性 |
git pull 远程仓库名 本地分支名 | 拉取远程仓库的内容到本地仓库 |
git stash | 备份当前工作区的内容,从最近的一次提交中读取相关内容,让工作区保证和上次提交的内容一致。同时,将当前工作区的内容保存到Git栈中 |
git stash pop | 从Git栈中读取最近一次保存的内容,恢复工作区的相关内容。 由于可能存在多个Stash的内容,所以用栈来管理,pop会从最近的一个stash中读取内容并恢复 |
git stash list | 显示Git栈内的所有备份,可以利用这个列表来决定从哪个地方恢复 |
git stash clear | 清空Git栈 |
git remote rm 远程仓库名 | 从本地移除远程仓库(只是从本地移除,并不会真正影响到远程仓库) |
git clone 协议+仓库地址 | 克隆远程仓库(常用的协议有SSH 和HTTPS ) |
git rebase -i HEAD~* | 交互式地修改已经提交的历史,非常强大的一个命令,* 为需要修改的历史提交记录数。也可以在 -i 参数后加上提交的版本号。 |
git reflog | 管理和查看引用日志,即查看执行的所有操作的记录,常用于误删分支后的恢复操作(结合git switch 新分支名 日志ID 命令) |