日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Git中的pull request真正比较的是什么?

發(fā)布時間:2025/3/15 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Git中的pull request真正比较的是什么? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言

利用git版本控制工具時,我們通常會從主分支拉出新分支進(jìn)行開發(fā),開發(fā)完成后創(chuàng)建pr(也就是pull request),讓其他小伙伴幫忙review,確定代碼沒有問題后再將新分支合并到主分支上。但是,你真的理解pull request中比較的兩個分支到底是誰嗎?

下面以一個虛擬案例進(jìn)行說明:假設(shè)主分支名為“Master”,拉出來的新分支名為“developBrance1”。

注:圖中的箭頭指代工作推進(jìn)方向,而不是提交的指向(提交指向總是由當(dāng)前提交指向父提交,和這里的箭頭是反著的)

最簡單的情況

上圖中,我們從主分支Master的m1提交點(diǎn)拉出新分支developBranch1,然后在developBranch1分支上開發(fā)(開發(fā)過程中產(chǎn)生了d1、d2、d3共3個提交),開發(fā)完成后創(chuàng)建pr,然后經(jīng)過Review后將其合并到主分支上形成新的提交點(diǎn)N。自然而然地,我們創(chuàng)建pr時選擇的源和目標(biāo)為:

src[developBranch1] -> dest[Master]

我們期望pr比較的是developBranch1和Master這兩個分支的最新提交點(diǎn),pr實(shí)際比較的也是developBranch1的d3提交點(diǎn)Master分支的m1提交點(diǎn)之間的差異。

增加一點(diǎn)復(fù)雜度

假設(shè)現(xiàn)在有其他小伙伴和你一同工作(這才是工作中的場景),另外一名小伙伴也從Master分支的m1提交點(diǎn)拉出分支developBranch2進(jìn)行開發(fā),并產(chǎn)生了若干提交,而且在我們開發(fā)完成之前已經(jīng)合并到了Master分支上:

現(xiàn)在我們創(chuàng)建pr時,源和目標(biāo)自然還是:

src[developBranch1] -> dest[Master]

但此時pr實(shí)際比較的是developBranch1和Master這兩個分支的最新提交點(diǎn)嗎(?developBranch1的d3提交點(diǎn)Master分支的m2提交點(diǎn))?

答案:不是的。現(xiàn)在pr比較的其實(shí)是developBranch1的d3提交點(diǎn)Master分支的m1提交點(diǎn),和上面最簡單的情況完全沒有差別!

?

其實(shí)pr的底層這樣實(shí)現(xiàn)非常有道理:

我們創(chuàng)建pr時,兩個分支比較的差異只是自己開發(fā)的內(nèi)容。試想,如果合作開發(fā)情況下比較developBranch1的d3提交點(diǎn)和Master分支的m2提交點(diǎn)之間的差異,那我們會同時看到其他小伙伴的開發(fā)內(nèi)容,你會想,這不是反應(yīng)了“最新工作進(jìn)度”嗎?不就是多看一個小伙伴的代碼嗎?好,再試想如果同時有很多人開發(fā),我們提交自己的代碼時,夾雜了許多其他小伙伴的代碼,你會不會因找不到自己開發(fā)的代碼而發(fā)瘋?

“最新工作進(jìn)度”的疑惑還在吧?下面來解答。

git是如何反映最新工作進(jìn)度的?

?其實(shí),git合并不同分支時,會自動取它們的并集,以保持最終工作進(jìn)度。就拿上圖說,如果developBranch1的d3提交點(diǎn)和developBranch2的o2提交點(diǎn)之間不存在沖突,兩者的開發(fā)工作最終都會在m3中體現(xiàn)(當(dāng)然,有沖突了就需要手動解決)。

現(xiàn)在還有一個問題,pr比較的原理是什么?

pr比較的是:

源分支的最近提交點(diǎn)源分支和目標(biāo)分支的最近公共父提交節(jié)點(diǎn)之間的差異。在文中第二張圖中,可以看到源分支是developBranch1,目標(biāo)分支是Master,兩個分支的最近公共父提交節(jié)點(diǎn)是m1;所以最終比較的就是源分支的最近提交點(diǎn)d3m1。

探索欲強(qiáng)的讀者也可以試試把不同分支分別作為pr的源和目標(biāo),觀察pr輸出的差異,以加深印象。

后記

其他更為復(fù)雜的分支pr原理類似,只是需要結(jié)合更為復(fù)雜的合并策略進(jìn)行分析。文中若有疏漏,歡迎指正補(bǔ)充。

好了,該去復(fù)習(xí)復(fù)習(xí)尋找兩節(jié)點(diǎn)最近公共父節(jié)點(diǎn)的原理了^_^

?

比較好的文章推薦

https://zhuanlan.zhihu.com/p/26227256

?

轉(zhuǎn)載于:https://www.cnblogs.com/xiaoxi666/p/9526896.html

總結(jié)

以上是生活随笔為你收集整理的Git中的pull request真正比较的是什么?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。