文章目录
概述 |
---|
- 免费的开源分布式版本控制系统,以往的集中式版本控制,大家都从中央仓库(远程库,代码托管中心)进行版本控制,一旦中央仓库出现问题,大家就没办法开发了。而Git,大家会从中央仓库把代码拉到本地,进行版本控制,开发完成可以push推送到中央仓库。就算中央仓库宕机,也不影响大家本地开发和本地版本控制
- Git本地分为3个区,我们平常写代码的是工作区(比如idea建立到本地磁盘的项目),当我们在工作区写好代码后,可以使用git add命令,将代码添加到暂存区
- 暂存区的代码只是进行临时存储,让git知道你有这些代码。当确定没有问题后,可以通过git commit命令将代码提交到本地库,从而生成历史版本。
- 本地库和暂存区不同,生成历史版本后,代码就删不掉了,只能用做回滚(代码恢复)或者基于这个版本修改,生成新的版本。除非你删本地库(删库跑路)。
- 这就是本地版本控制的大致流程,之后可以通过push命令,将代码推送到中央仓库(比如公司用GitLab建立的局域网仓库,比如GitHub,码云等互联网免费仓库)
Git和代码托管中心 |
---|
- 代码托管中心(中央仓库,远程库),是基于网络服务器的远程代码仓库,一般我们简单称为远程库
- 主流局域网远程仓库:GitLab
- 主流互联网远程仓库:GitHub(外网,国外网站),Gitee码云(国内网站)
1. Git命令
- Windows环境下安装成功后(和Linux使用没有区别,命令都一样),鼠标右键菜单选择Git Bash
命令 | 描述 |
---|---|
git config --global user.name 用户名 | 设置用户签名 |
git config --global user.email 邮箱 | 设置用户签名 |
git init | 初始化本地库 |
git status | 查看本地库状态 |
git add 文件名 | 添加到暂存区 |
git commit -m “日志信息” 文件名 | 提交到本地库 |
git reflog | 查看历史记录 |
git reset --hard 版本号 | 版本穿梭 |
1.1 设置用户签名
- 只需要设置一次,提交代码时,不设置用户签名是会报错的,用来区分不同操作者身份,用户的签名在每个版本的提交信息中可以看到,以确认本次提交是谁做的。
- 注意:这里设置的用户签名只是标识,和连接远程库,例如GitHub等代码托管平台的账号没有任何关系。
- 需要设置用户名和邮箱
git config --global user.name "用户名"
git config --global user.email "邮箱@163.com"
- 设置成功后,会在你当前登录用户的文件夹下,.gitconfig文件中保存相关信息
1.2 初始化本地库
- 想要让git进行版本控制,就得让git获取你目录的管理权
- 也就是通过git init命令,让它对指定目录初始化,初始化成功,目录中会生成.git文件夹(是一个隐藏文件),它就是本地库,如果你删除这个库,将丢失你的所有代码分支和历史版本记录
- 进入需要git管理的文件夹,然后执行git init命令即可
git init
# 如果是在linux想要查看隐藏目录,需要直接通过ll命令无法查看,需要ll -a命令
ll -a
1.3 查看本地库状态
- 可以通过git status查看本地库的状态,方便了解分支信息
- On branch 分支名:显示当前处于哪个分支
- Changes not staged for commit:显示还没有提交的文件,红色表示更改过,绿色表示距离上次提交还没有更改过
- Untracked files:还没有追踪的文件(只在工作区,没有到暂存区),还没有对其进行版本控制的文件
1.4 暂存区操作命令
- 前面查看本地库状态时,Untracked files会展示在工作区的文件,如果想要对这些文件版本控制,可以通过git add xxx命令,将其添加到暂存区,也可以从暂存区删除。
- 可以使用通配符,也可以特指某些文件
git add hello.txt # 将指定hello.txt文件添加到暂存区
git add * # 将所有文件添加到暂存区
git rm --cached hello.txt # 将指定hello.txt文件从暂存区删除,工作区不受影响
1.5 本地库
- 当文件提交到暂存区后,可以提交到本地库,产生历史版本
- 通过git commit -m “日志信息” 要提交的文件名,来进行提交
# 提交版本,并设置日志信息
git commit -m "修改导弹击中敌方领土后,丢失视野的bug" hello.txt
# 查看提交版本
git reFlog
- 此时再次查看状态会提示,没什么可以提交的,工作树非常干净。当你再次修改代码,才会再次提示你提交到暂存区什么的操作。
- 查看提交版本git reFlog,可以看到相关信息,其中965c6a1是版本号的精简版(前7位),后面first commit是提交时设置的日志信息
- 通过git log命令查看详细信息
1.6 版本穿梭
- 提交了这么多版本,如何切换代码版本呢?
- 可以通过版本号(精简版就可以),使用命令git reset --hard 版本号,切换到指定版本
git reset --hard 版本号
- 版本穿梭虽然是移动到特定版本,它会同步代码到工作区,但你无法改变本地库存储的版本代码。
- 也就是说,你就是再次修改工作区代码进行提交,也只会产生新的版本,而不会改变当前本地库中对应版本的代码
2. Git分支操作
- 一般生产环境(供开发、测试人员使用)和线上环境(用户使用),需要两个不同的分支
- 这样开发人员操作的分支,不会影响到线上分支的代码
- 一般,生产环境的代码已经经过重重测试确保没有问题后,才会进行分支合并
- 版本控制过程中,往往会同时推进多个任务,每个任务为了互不影响,都会建立单独的分支,让程序员从主线上分离开来,开发自己的分支,不会影响主线分支。
- 当大家都开发的差不多了,在进行代码整合测试,合并分支
- 优点:同时并行推进多个功能开发,提高开发效率。各分支开发过程中,如果某分支出现问题,不会影响其它分支,失败的分支可以删除重新开始。
命令 | 描述 |
---|---|
git branch 分支名 | 创建分支 |
git branch -v | 查看分支 |
git checkout 分支名 | 切换分支 |
git merge 分支名 | 把指定分支合并到当前分支上 |
2.1 冲突合并
- 当A分支和B分支进行合并的时候,发现两个分支对同一个文件的代码,都进行了修改
- 此时Git就不知道该用谁的代码了,需要我们人为决定
- 人为决定好后,保存文件,之后就需要重新添加到暂存区,提交到本地库(提交时不可以指定文件名,因为不知道提交哪个文件)
3. 团队协作
3.1 团队内协作
- 刚开始可以使用pull命令将远程库拉取到本地库,当第一版代码在本地库写好后,push到远程库
- 此时团队其它人就可以进行clone,将第一版代码下载下来,在自己的本地进行修改
- 修改好之后,可以再次push到远程库
3.2 跨团队协作
- 当岳不群团队要和东方不败的团队协作时(假设东方不败对岳不群团队的项目进行修改)
- 东方不败先通过fork命令将岳不群的库拉取一份到自己的远程库,然后自己的团队进行团队内协作,修改代码
- 修改好后,发送一个Pull request推送请求给岳不群,告诉他修改好了
- 岳不群审核后,决定没有问题,通过merge命令,将代码进行合并。