鼠年全马铁人挑战 WEEK 25: Git branch 合併 Merge Rebase

分支

在开发中我们会有许多版本,像是开发版、测试版,测试功能都正常,才会合併到上线版。

分支就像是影分身术的概念,而我们会透过 git 的指令,来取需要分身的部分。

新增分支:git branch 分支名称查看分支:git branch 

HEAD 表示目前在哪里,预设是指向 master

http://img2.58codes.com/2024/20124879i9iMgXDkAn.png

切换分支:git checkout 分支名称删除分支:git branch -d 分支名称 、-D 是强制删除还原上个版本:git reset HEAD^

HEAD 代表目前位置
HEAD^ 代表 HEAD 往前一个版本,HEAD^^ 代表 HEAD 往前二个版本
HEAD~1 代表 HEAD 往前一个版本,HEAD~4 代表 HEAD 往前四个版本

http://img2.58codes.com/2024/20124879fJXozlDhfd.png
http://img2.58codes.com/2024/20124879ENB8oWQlMQ.png
http://img2.58codes.com/2024/20124879X8Gz8Xl6db.png

分支合併

Merge

在使用 merge 合併分支的时候,git 预设会以 fast-forward 的模式进行,那什么是 fast-forwardno-fast-forward 呢?

fast-forward

git merge 分支名称


Gif 来源:CS Visualized

no-fast-forward

git merge 分支名称 --no-ff


Gif 来源:CS Visualized

可以很清楚的看到同样都是 merge,使用 no-fast-forward 的模式,会长出小耳朵,可以让成员在日后很清楚辨识不同的 Commit 历程,但小耳朵过多会造成混乱,所以会需要 fast-forward 用来 merge 些较不重要的 Commit,像是零碎的 bug fix,保持 Commit 的乾净。

重要的合併用 git merge 分支名称 --no-ff
不重要的合併用 git merge 分支名称

冲突

当同时修改同一个档案的同一行code,就会发生冲突,
因为 git 无法知道哪个才是正确的内容,
这时就需要双方沟通,看要用谁的code。

假设我们在 cat 分支修改了 index.html 的内容如下:
http://img2.58codes.com/2024/201248791ZeLPCHhq8.png
然后在 dog 分支刚好也修改了 index.html,内容如下:
http://img2.58codes.com/2024/201248792KhvemwOiU.png
这时候进行合併,发现因为第 9 行重複,所以产生了冲突,
此时状态,已被放置至暂存区。
选要用哪个内容,在跑过一次 Commit 流程,就解决冲突了。
http://img2.58codes.com/2024/20124879arA6Fnj7zv.pnghttp://img2.58codes.com/2024/20124879EiU6BiMYzX.png

Rebase

从字面上来看,「rebase」是「re」加上「base」,翻成中文大概是「重新定义分支的参考基準」的意思。

合併版本


Gif 来源:CS Visualized

修改历史 commit 纪录


Gif 来源:CS Visualized

使用 Rebase 来合併分支

优点:很自由可以自己决定历史顺序
缺点:有时候恍神失智,忘了自己 Rebase 到哪,
不小心弄坏了还不知道怎么 reset 回来 (¬_¬),
发生冲突时会停在一半,对不熟悉 Rebase 的人来说是个困扰

使用时机

通常在还没有推(Push)出去但感觉得有点乱(或太琐碎)的 Commit,可以先使用 Rebase 分支来整理完再推出去。但如同前面提到的,Rebase 等于是修改历史,修改已经推出去的历史可能会对其它人带来困扰,所以对于已经推出去的内容,非必要的话请尽量不要使用 Rebase

技术总结:

创立 branchgit branch 分支名称
切换 HEAD 位置 git ckeckout 位置
合併到主要版本用 git merge 分支名称 --no-ff
整理 commit 点 可以用 git rebasegit merge

参考文章

为你自己学 Git

练习 Git 小游戏

Learn Git Branching


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章