1. Git前瞻
1、什么是版本控制:版本控制是一种用于记录和管理项目文件变更的系统。它会把我们每次代码变更的记录存起来,包括谁在什么时间修改了哪些文件以及具体修改了什么内容。通过版本控制,可以高效实现多人协作开发、回溯代码变更历史、切换不同版本的代码、定位修改代码的责任人,以及备份源码等。
2、常见的版本控制工具:
- CVS:早期老牌的管理工具。
- ClearCase:IBM推出的企业级大型版本管理工具,收费。
- VSS:微软推出的版本管理工具,用的很少(Java程序猿很少使用微软的东西)。
- SVN(小乌龟):市面最流行的版本管理工具之一(集中式的,依赖于远程服务器),拥有CVS所有功能,修复了CVS的不足。
- Git:开源的、分布式版本控制工具,Linux之父开发的(Linus Torvalds,号称开源大魔王、黑客)。早期Linux之父使用BitKeeper非常顺手,后来BitKeeper要搞商业化,于是大魔王就手写了一个版本控制工具,火遍大江南北。Git中通过Git仓库来存储历史提交记录和源码,Git仓库分为:
- 本地仓库:开发人员自己电脑上的git仓库。
- 远程仓库(托管平台):远程服务器上的仓库(比如 Gitee、GitHub、GitLab等等)。
3、Git使用流程:
-
commit:提交,将本地文件和版本信息保存到本地仓库。
-
push:推送,将本地仓库文件和版本信息上传到远程仓库。
-
pull:拉取,将远程仓库文件和版本信息下载到本地仓库。
4、Git安装与配置:
(1)下载Git:https://git-scm.com/downloads(官方)、https://registry.npmmirror.com/-/binary/git-for-windows/v2.30.0.windows.1/Git-2.30.0-64-bit.exe(淘宝镜像源)
(2)安装Git:双击安装包,进入安装界面,一直下一步即可。
(3)配置基本信息:
#配置基本信息:姓名和邮箱
git config --global user.name '姓名' #建议都使用英文+数字
git config --global user.email '邮箱地址' #建议使用真实邮箱地址
#让git存储gitee的帐号和密码,不需要每次操作远程仓库都输帐号密码(可选)
git config --global credential.helper store
#验证是否配置成功:
git config --list
2. Git常用命令
命令不用死记硬背,记住常用命令即可。
2.1 操作本地仓库
1、如何获取本地仓库:
-
方式1:直接克隆远程仓库,得到本地仓库,命令:
git clone 仓库地址
。- 第一次它会弹出一个登录框,如果帐号密码输错了,清理一下旧的远程仓库的认证信息即可:
git config --system --unset credential.helper
-
方式2:本地文件夹里 初始化本地仓库,命令:
git init
。
2、Git本地的三个工作区域:
工作区
:项目仓库文件夹里就是工作区,我们直接在这个文件夹里编辑代码。版本库
:工作区内有一个隐藏的.git文件夹
就是版本库,其中保存了项目的所有变更历史记录。如果把.git文件夹删掉了(慎用),仓库就成为普通文件夹了,Git不能再进行版本控制了。暂存区
:.git文件夹里有个index文件
就是暂存区,也叫stage。暂存区是临时保存修改文件的地方。
3、Git工作区里的文件状态:
- untracked:未跟踪。表示文件是新创建的,还没有纳入到git的管控
- tracked:已跟踪,已纳入git版本控制,随着操作又有不同的状态变化
- Unmodifed:文件未修改,没有新的变化
- Modified:文件已被修改
- Staged:文件已暂存,已添加到暂存区了
注意:文件的状态会随着我们执行Git的命令发生变化。
4、本地仓库操作命令:
git status
:查看本地仓库的状态。git add 目录
:将工作区内的指定目录(包括子目录)添加到暂存区中。git add 文件
:将工作区内的指定文件添加到暂存区。git add .
:将工作区内的所有文件或目录添加到暂存区中。git reset 目录或文件
:将暂存区的指定目录或文件取消暂存。git reset --hard 版本号
:切换到指定版本。(每次commit都会产生新的版本号,通过git log查版本号就可以回到历史版本)git commit -m "提交的描述信息" 目录或文件
:将暂存区的目录或文件提交到本地版本库,并设置日志。(英文单双引号都可以)git commit -m "提交的描述信息"
:将暂存区的所有目录或文件都提交到本地版本库,并设置日志。git log
:查看本地版本库的所有日志记录。git log 目录或文件
:查看本地版本库指定目录或者文件的日志记录。git reflog
:查看本地仓库所有变更记录,可以帮助找回丢失的commit或分支。
2.2 操作远程仓库
1、操作远程仓库常用命令:
git remote
:查看本地仓库所关联的远程仓库。git remote -v
:查看本地仓库所关联远程仓库的详细信息。git remote add 远程仓库简称 远程仓库地址
:添加远程仓库。git remote remove 远程仓库简称
:删除关联的远程仓库。git clone 远程仓库地址
:克隆远程仓库代码。git pull 远程仓库简称 分支名称
:从远程仓库里拉取最新的代码。git push 远程仓库简称 分支名称
:把本地仓库里的代码推送到远程仓库。
注意事项:如果本地仓库不是从远程仓库克隆,而是本地创建的,并且仓库中存在文件,此时再从远程仓库拉取文件会报错
fatal: refusing to merge unrelated histories
解决方案:在git pull命令后面添加参数
--allow-unrelated-histories
。(强制拉取)git pull origin 分支名称 --allow-unrelated-histories
2、小结:Git使用流程
-
先把远程仓库克隆到本地,得到本地仓库(我们的项目),执行命令,
git clone 远程仓库地址
-
如果本地新增或修改或删除了文件,需要把文件添加到暂存区 :
git add 文件路径 文件路径...
- 查看本地仓库的状态,执行命令:
git status
- 如果想把暂存区里的某个文件取消暂存,执行命令:
git reset 文件路径 文件路径 ...
- 查看本地仓库的状态,执行命令:
-
然后把暂存区里所有内容一次提交到本地仓库,执行命令:
git commit -m '描述信息'
- 查看过去本地仓库的提交日志记录,执行命令:
git log
- 查看过去本地仓库的提交日志记录,执行命令:
-
如果想把本地仓库代码推送到远程仓库,执行命令:
git push 远程仓库简称 分支名称
-
如果要获取远程仓库最新代码,执行命令:
git pull 远程仓库简称 分支名称
(有时候会出现冲突)
2.3 操作分支
1、什么是Git分支:
Git分支是指在Git版本控制系统中的一个独立的开发线,用于并行开发不同的功能或修复不同的bug。每个分支都包含自己的代码提交记录,可以独立进行提交、修改和合并操作,而不会影响主分支或其他分支的代码。通过使用分支,团队成员可以在不干扰彼此工作的情况下进行并行开发,最终将各自的工作内容合并到某个分支中。
本地仓库和远程仓库中都有分支,同一个仓库可以有多个分支,仓库里默认会有一个master分支(通常主分支用于保存稳定的代码版本)。
实际开发中,通常是要开发一个功能,就创建一个新分支;要修改一个bug,就创建一个新分支。
切换分支前,需要要把代码提交或缓存起来,否则会带到其他分支。
2、操作分支常用命令:
-
git branch
: 查看本地分支。 -
git branch -r
:查看远程分支。 -
git branch -a
:查看所有分支。(本地分支和远程分支) -
git branch 分支名称
: 创建分支。 -
git checkout 分支名称
: 切换分支。 -
git push 远程仓库简称 远程仓库分支名称
: 推送分支到远程仓库。(如果远程没有这个分支,它会自动创建) -
git merge 分支名称
:把指定分支合并到当前分支。#示例:把本地dev分支合到master git checkout master git merge dev
-
git branch -d 分支名名称
:删除本地分支。 -
git push 远程仓库简称 -d 远程分支名称
:删除远程仓库分支。
2.4 操作标签
标签:对整个项目的某一次提交记录打一个标记,通常作为项目的里程碑。将来可以更方便的获取里程碑阶段的代码。
标签的作用:用于标记代码版本、发布里程碑,方便团队成员和用户能够更容易地识别不同的版本。
操作标签常用命令:(一般运维来做)
git tag # 查看标签
git tag 标签名 # 创建标签 (本地创建)
git push 远程版本库简称 标签名 # 把标签推送到远程仓库
git checkout -b 新分支名称 标签名 # 检出标签(修复bug用的,例如windows打补丁,检出某个出问题的标签到一个新分支上,然后去修复bug)
git tab -help # 查看帮助文档
3. 在IDEA中操作Git
参考:https://blog.csdn.net/liuerchong/article/details/116640039
整合Git: