Git 快速使用手册(二)
五、分支(branch)
5.1 概念
在版本控制过程中,使用多条线同时推进多个任务。这里面说的多条线,就是多个分支。
Git 的分支,其实本质上仅仅是指向提交对象的可变指针。 Git 的默认分支名字是
master
。 在多次提交操作之后,其实已经有一个指向最后那个提交对象的master
分支。master
分支会在每次提交时自动向前移动。
5.2 分支的实际意义
使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。如果某个分支开发失败,可以直接删除该分支,不会影响其它分支。
5.3 分支的基本操作
- 查看分支
git branch -v
- 创建分支
git branch [name]
- 切换分支
git checkout [branchname]
- 删除分支
git branch -d [branchname]
测试:
-
进入
branch01
分支,创建Test4.txt
文件并添加内容 -
添加至暂存区并提交至本地库
-
查看分支
- 切换到主分支,查看文件列表
结论:各分支的修改与其它分支不相干
5.4 分支合并与冲突
- 合并分支
git merge [branchname]
测试:
- 在
master
分支中创建Test4.txt
文件并添加和branch01
分支Test4.txt
文件中不同的内容 - 添加至暂存区并提交至本地库
- 在
master
分支中合并branch01
分支
❀ 什么时候会出现冲突问题?
两个将要合并的分支,在相同文件的相同位置内容不一致时。
冲突的解决:
- 将所有冲突文件进行修改
- 添加到暂存区
- 执行命令
git commit -m "msg"
命令
注意:
commit
命令不可以带文件名
六、远程库
6.1 本地库与远程库的交互
6.2 初始化本地库和创建远程库
测试:
- 创建文件夹并初始化为本地库
- 创建 GitHub 远程库
- 利用
git remote add [originname] [originUrl]
命令添加远程地址 - 利用
git remote -v
命令查看远程地址
- 创建任意一个文件并同步至本地库
- 利用
git branch -M main
命令将master
分支改名为main
6.3 push
操作
测试:
- 利用
git push [orginname] [branchname]
进行推送操作
- 进入 GitHub 查看之前创建的远程库
总结:可以看到远程库的内容发生了更新
6.4 clone
操作
测试:
- 创建一个新的文件夹并进入其中
- 利用
git clone [orginUrl]
命令进行克隆操作
❀ 克隆操作完成了什么?
- 初始化本地库
- 将远程库内容完整地克隆到本地
6.5 Github 的邀请(invite)操作
测试:
- 在克隆的仓库中创建新的文件
Demo.txt
,同步到本地库 - 将本地库推送到远程库
可以看到这次
push
操作没有进行登录验证,原因是 Git 在使用时,本地有缓存
- 通过控制面板,进入到 Windows 的凭据管理器,将 Git 的凭据删掉
- 追加内容到文件
Demo.txt
,同步到本地库 - 再次将本地库推送到远程库,本次提示登录时登录其它 Github 账号(user2)
可以看到这次
push
操作发生了403
错误,原因是该账号没有加入团队,因而无权访问
- 登录原先的 Github 账号(user1),打开对应项目,点击
Settings
,点击Manage access
- 点击
invite a collaborator
,并输入成员的信息
- 点击复制邀请连接
-
退出登录,再登录被邀请人的账号(user2)
-
粘贴链接进入,点击同意邀请
- 再次以协作者身份进行
push
操作,发现push
成功
6.6 对远程库的拉取(pull)操作
6.1
节图示中的pull
操作,可以分为两步执行——fetch
操作和merge
操作
测试:
- 返回原来的仓库,通过执行
git fetch orgin
命令,将远程库抓取到本地
- 通过
git checkout orgin/main
命令,切换到orgin/main
中 - 查看内容,确认无误后可以返回
main
,通过git merge orgin/main
命令进行合并操作
提示:以上两种操作(
fetch
操作和merge
操作),在确认没有风险时,可以直接用pull
操作(即git pull orgin
)代替。
6.7 协作开发时的冲突与解决
测试:
- 在 user1 的本地库下,创建文件
Test.txt
,添加些许内容,并推送至远程库
提示:在推送之前记得切换到 user1 的账号
- 在账号2的本地库下,进行
pull
操作
- 追加内容到该
Test.txt
文件中
- 执行
push
命令
提示:在推送之前记得切换到 user2 的账号
- 进入账号1的本地库,追加内容到该
Test.txt
文件中
- 执行
push
命令
提示:在推送之前记得切换到 user1 的账号
这里会发生错误——提示你当前远程库和本地库的内容有冲突,需要先执行
pull
操作进行冲突解决。
- 执行
pull
命令
- 查看发生冲突的文件
Test.txt
,解决冲突
- 同步到本地库
注意:和之前分支冲突的解决一样,最后的
commit
操作不要带文件名
- 推送到远程库
6.8 跨团队协作的交互
跨团队协作主要操作
fork
、pull request
、merge pull request
皆在 GitHub 上完成,具体可查看 GitHub 的官方文档:collaborating-with-issues-and-pull-requests
七、IntelliJ IDEA 集成 Git
7.1 配置 Git 路径
7.2 初始化本地库
步骤:
-
创建一个项目(模块)
-
点击菜单栏的
VCS
,找到并点击Create Git Repository
,即可创建完成
7.3 添加到暂存区
步骤:
- 在模块中创建一个文件
Demo.txt
可以看到 IDEA 自动弹出了一个
Add
操作的提示,我们可以点击Add
,并且勾选Remember don't ask again
选项,以便使其自动提交。当然,我们也可以选择Cancel
,以下面的方式,进行手动提交。
-
右键点击新创建的模块
-
找到
Git
选项,点击Add
,即可将模块中的内容进行提交
提示:可以看到,
Add
选项后面有 IDEA 默认的快捷键——Ctrl + Alt + A
,我们可以采用这个快捷键进行更方便的提交。当然,也可以设置自己的快捷键,或者直接按照步骤一中的方式,使其自动提交。
7.4 提交到本地库
步骤:
- 点击上图中的
Commit
选项,或者直接采用 IDEA 的默认快捷键Ctrl + K
,跳转到提交界面
- 上图
Commit Message
一栏,即之前的-m
选项的内容,输入相应信息后点击Commit
即提交完成
7.5 推送本地库到 Git 托管服务平台
步骤:
- 下载 GitHub 或 Gitee 的 IDEA 的插件(本次采用国内速度较快的 Gitee)
注意:2020年10月起,GitHub 的主分支
master
更名为main
。为保障一致性,建议 IDEA 将主分支名称配置为main
。提示:对于 Gitee 上已有的项目,若想将主分支名称更改为
main
,可以基于主分支创建新的分支main
,然后设置为主分支,并将原先的master
分支删除,由此即可完成主分支的更名操作。
- 点击菜单栏的
VCS
,找到并点击Share Project on Gitee
- 权限验证后,输入相应信息,点击
Share
即可完成推送
7.6 克隆远程仓库到本地
步骤:
- 点击菜单栏的
File
,点击New
选项里的Project from Version Control...
,跳转到
- 在
URL
输入框中输入你想要克隆的项目的URL,点击Clone
完成克隆
7.7 使用 IDEA 解决冲突问题
步骤:
- 新建一个 Java 项目,按照以上步骤将项目推送到 Gitee 平台
- 创建一个
Person
类
-
添加到暂存区,提交到本地库,推送到远程库
-
在 Gitee 网站上为 Person 类添加 weight 属性
- 输入提交信息并点击
提交
- 在 IDEA 中为Person类添加height属性,添加到暂存区,提交到本地库
- 使用快捷键
Ctrl + Shift + K
进行Push
操作 - 可以看到,IDEA自动弹出了
Push Rejected
窗口,这是因为我们在其Push
之前,对远程库进行了修改,导致远程库内容有本地不存在的内容,即发生了版本冲突
- 点击
Merge
,进入Conflicts
窗口
- 选中冲突列表中你想要解决的文件(这里只有
Person.java
一个冲突),点击Merge...
,进入Merge Revision for XXX
窗口
- 解决冲突问题后点击
Apply
- 刷新在 Gitee 网站上的 Person 类,发现冲突得以解决
八、总结
-
本手册中涵盖了日常开发中常用的 Git 操作,基本满足了快速入门 Git 的作用。
-
从第七章的内容可以看出,使用 IntelliJ IDEA 操作 Git 非常的简单方便,日常开发中足以够用。不过,一些不太常见的问题,还是要借助
Git Bash
去完成,这里提供了 Git 的官方手册,以供参考:https://git-scm.com/book/zh/v2 -
Git Bash
本质上是一个 MinGW ,日常中除了作为 Git 的主要操作窗口,还可以利用其 MinGW 的本质特性,用来执行 Linux 命令等。