日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

git分支的衍合

發(fā)布時間:2025/4/16 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 git分支的衍合 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?

把一個分支中的修改整合到另一個分支的辦法有兩種:merge和rebase,

當(dāng)開發(fā)進(jìn)程分叉到兩個不同的分支,又各自提交了更新。

最容易的整合分支的方法是merge, 它會把兩個分支最新的快照以及兩者的共同祖先進(jìn)行三方合并,合并的結(jié)果是產(chǎn)生一個新的提交對象。

其實還有另外一個選擇,可以在一個分支里發(fā)生的變化補(bǔ)丁在另一個分支重新打一遍,這種操作叫做衍合,

rebase的作用就是把在一個分支里提交的改變放到另一個分支里重放一遍。

$ git checkout experiment $ git rebase master

它的原理是回到兩個分支最近的共同祖先,根據(jù)當(dāng)前分支(也就是要進(jìn)行衍合的分支experiment)后續(xù)的歷次提交對象,生成一系列文件補(bǔ)丁,然后以基線分支(也就是主干分支master)最后一個提交對象為新的出發(fā)點,逐個應(yīng)用之前準(zhǔn)備好的補(bǔ)丁文件,最后會生成一個新的合并提交對象,從而改寫experiment的提交歷史,使它成為master分支的直接下游。

?

衍合最后生成的快照,其實和普通的三方合并的快照內(nèi)容一模一樣。雖然最后整合得到的結(jié)果沒有任何區(qū)別,

但是衍合能產(chǎn)生一個更為整潔的提交歷史。如果觀察一個衍合過的分支的歷史記錄,看起來會更清楚:仿佛所有修改都是在一跟線上先后進(jìn)行的,盡管實際上他們原本是同時并行發(fā)生的。

一般我們使用衍合的目的,是想要得到一個能在遠(yuǎn)程分支上干凈應(yīng)用的補(bǔ)丁,比如某些項目你不是維護(hù)者,但是想幫點忙的話,最好使用衍合:先在自己的一個分支里進(jìn)行開發(fā),當(dāng)準(zhǔn)備向主項目提交補(bǔ)丁的時候,根據(jù)最新的origin/master進(jìn)行一次衍合操作然后再提交,這樣維護(hù)者就不需要做任何工作(實際上是把解決分支補(bǔ)丁同最新主干代碼之間沖突的責(zé)任,轉(zhuǎn)化為由提交補(bǔ)丁的人來解決),維護(hù)者只需要根據(jù)你提供的倉庫地址進(jìn)行一次快進(jìn)合并,或者直接采納你提交的補(bǔ)丁。

======== 衍合的風(fēng)險=========

一旦分支的提交對象發(fā)布到公共倉庫,就千萬不要對該分支進(jìn)行衍合操作。

進(jìn)行衍合的時候,實際上拋棄了一些顯存的提交對象而創(chuàng)造了一些類似但不同的新的提交對象,

如果你把原來分支中的提交對象發(fā)布出去,并且其他人更新下載后在其基礎(chǔ)上開展工作,而稍后你又用git rebase

拋棄這些提交對象,把新的重演后的提交對象發(fā)布出去的話,你的合作者就不得不重新合并他們的工作,這樣當(dāng)你再次從他們那里獲取內(nèi)容的時候,提交歷史就會變得一團(tuán)糟。

?https://git-scm.com/book/zh/v1/Git-%E5%88%86%E6%94%AF-%E5%88%86%E6%94%AF%E7%9A%84%E8%A1%8D%E5%90%88

?

/workspace/xxx-xx-cms:the-channel-sort$ git push origin the-channel-sort To git@bitbucket.org:xxx-xxx-cms/xxx-xx-cms.git! [rejected] the-channel-sort -> the-channel-sort (non-fast-forward) error: failed to push some refs to 'git@bitbucket.org:xxx-xxx-cms/xxx-xx-cms.git' To prevent you from losing history, non-fast-forward updates were rejected Merge the remote changes (e.g. 'git pull') before pushing again. See the 'Note about fast-forwards' section of 'git push --help' for details. /workspace/xxx-xx-cms:the-channel-sort$ git fetch remote: Counting objects: 13, done. remote: Compressing objects: 100% (13/13), done. remote: Total 13 (delta 9), reused 0 (delta 0) Unpacking objects: 100% (13/13), done. From bitbucket.org:xxx-xxx-xxx/xxx-xx-cms* [new branch] production-deployment -> origin/production-deployment* [new branch] staging -> origin/staging /workspace/xxx-xx-cms:the-channel-sort$ git rebase origin/the-channel-sort First, rewinding head to replay your work on top of it... Applying: 重構(gòu)代碼 /workspace/xxx-xx-cms:the-channel-sort$ gitg /workspace/xxx-xx-cms:the-channel-sort$ git push Counting objects: 35, done. Delta compression using up to 4 threads. Compressing objects: 100% (18/18), done. Writing objects: 100% (18/18), 2.29 KiB, done. Total 18 (delta 14), reused 0 (delta 0) remote: remote: View pull request for the-channel-sort => master: remote: https://bitbucket.org/xxx-xxx-cms/xxx-xx-cms/pull-requests/21?t=1 remote: To git@bitbucket.org:xxx-xxx-cms/xxx-xx-cms.git841dda2..95cdf0d the-channel-sort -> the-channel-sort

?

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

總結(jié)

以上是生活随笔為你收集整理的git分支的衍合的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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