欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁 > 知識庫 > 淺析Git 分支的新建與合并

淺析Git 分支的新建與合并

熱門標簽:外呼系統(tǒng)怎么群發(fā)短信 400電話辦理費用低 谷歌地圖標注日期 400電話申請到底哪家好 地圖標注項目幾個月 鶴壁高頻外呼系統(tǒng)多少錢一個月 蘇州呼叫中心外呼系統(tǒng)哪家強 聯(lián)通外呼系統(tǒng)電腦app軟件 宿遷怎么辦理400電話

分支的新建與合并

現(xiàn)在讓我們來看一個簡單的分支與合并的例子,實際工作中大體也會用到這樣的工作流程:

  • 開發(fā)某個網(wǎng)站。
  • 為實現(xiàn)某個新的需求,創(chuàng)建一個分支。
  • 在這個分支上開展工作。

假設此時,你突然接到一個電話說有個很嚴重的問題需要緊急修補,那么可以按照下面的方式處理:

  • 返回到原先已經(jīng)發(fā)布到生產(chǎn)服務器上的分支。
  • 為這次緊急修補建立一個新分支,并在其中修復問題。
  • 通過測試后,回到生產(chǎn)服務器所在的分支,將修補分支合并進來,然后再推送到生產(chǎn)服務器上。
  • 切換到之前實現(xiàn)新需求的分支,繼續(xù)工作。

分支的新建與切換

首先,我們假設你正在項目中愉快地工作,并且已經(jīng)提交了幾次更新(見圖 3-10)。


圖 3-10. 一個簡短的提交歷史

現(xiàn)在,你決定要修補問題追蹤系統(tǒng)上的 #53 問題。順帶說明下,Git 并不同任何特定的問題追蹤系統(tǒng)打交道。這里為了說明要解決的問題,才把新建的分支取名為 iss53。要新建并切換到該分支,運行git checkout并加上-b參數(shù):

$ git checkout -b iss53
Switched to a new branch 'iss53'

這相當于執(zhí)行下面這兩條命令:

$ git branch iss53
$ git checkout iss53

圖 3-11 示意該命令的執(zhí)行結果。


圖 3-11. 創(chuàng)建了一個新分支的指針

接著你開始嘗試修復問題,在提交了若干次更新后,iss53分支的指針也會隨著向前推進,因為它就是當前分支(換句話說,當前的HEAD指針正指向iss53,見圖 3-12):

$ vim index.html
$ git commit -a -m 'added a new footer [issue 53]'


圖 3-12. iss53 分支隨工作進展向前推進

現(xiàn)在你就接到了那個網(wǎng)站問題的緊急電話,需要馬上修補。有了 Git ,我們就不需要同時發(fā)布這個補丁和iss53里作出的修改,也不需要在創(chuàng)建和發(fā)布該補丁到服務器之前花費大力氣來復原這些修改。唯一需要的僅僅是切換回master分支。

不過在此之前,留心你的暫存區(qū)或者工作目錄里,那些還沒有提交的修改,它會和你即將檢出的分支產(chǎn)生沖突從而阻止 Git 為你切換分支。切換分支的時候最好保持一個清潔的工作區(qū)域。稍后會介紹幾個繞過這種問題的辦法(分別叫做 stashing 和 commit amending)。目前已經(jīng)提交了所有的修改,所以接下來可以正常轉換到master分支:

$ git checkout master
Switched to branch 'master'

此時工作目錄中的內(nèi)容和你在解決問題 #53 之前一模一樣,你可以集中精力進行緊急修補。這一點值得牢記:Git 會把工作目錄的內(nèi)容恢復為檢出某分支時它所指向的那個提交對象的快照。它會自動添加、刪除和修改文件以確保目錄的內(nèi)容和你當時提交時完全一樣。

接下來,你得進行緊急修補。我們創(chuàng)建一個緊急修補分支hotfix來開展工作,直到搞定(見圖 3-13):

$ git checkout -b hotfix
Switched to a new branch 'hotfix'
$ vim index.html
$ git commit -a -m 'fixed the broken email address'
[hotfix 3a0874c] fixed the broken email address
 1 files changed, 1 deletion(-)


圖 3-13. hotfix 分支是從 master 分支所在點分化出來的

有必要作些測試,確保修補是成功的,然后回到master分支并把它合并進來,然后發(fā)布到生產(chǎn)服務器。用git merge命令來進行合并:

$ git checkout master
$ git merge hotfix
Updating f42c576..3a0874c
Fast-forward
 README | 1 -
 1 file changed, 1 deletion(-)

請注意,合并時出現(xiàn)了“Fast forward”的提示。由于當前master分支所在的提交對象是要并入的hotfix分支的直接上游,Git 只需把master分支指針直接右移。換句話說,如果順著一個分支走下去可以到達另一個分支的話,那么 Git 在合并兩者時,只會簡單地把指針右移,因為這種單線的歷史分支不存在任何需要解決的分歧,所以這種合并過程可以稱為快進(Fast forward)。

現(xiàn)在最新的修改已經(jīng)在當前master分支所指向的提交對象中了,可以部署到生產(chǎn)服務器上去了(見圖 3-14)。


圖 3-14. 合并之后,master 分支和 hotfix 分支指向同一位置。

在那個超級重要的修補發(fā)布以后,你想要回到被打擾之前的工作。由于當前hotfix分支和master都指向相同的提交對象,所以hotfix已經(jīng)完成了歷史使命,可以刪掉了。使用git branch-d選項執(zhí)行刪除操作:

$ git branch -d hotfix
Deleted branch hotfix (was 3a0874c).

現(xiàn)在回到之前未完成的 #53 問題修復分支上繼續(xù)工作(圖 3-15):

$ git checkout iss53
Switched to branch 'iss53'
$ vim index.html
$ git commit -a -m 'finished the new footer [issue 53]'
[iss53 ad82d7a] finished the new footer [issue 53]
 1 file changed, 1 insertion(+)


圖 3-15. iss53 分支可以不受影響繼續(xù)推進。

值得注意的是之前hotfix分支的修改內(nèi)容尚未包含到iss53中來。如果需要納入此次修補,可以用git merge master把 master 分支合并到iss53;或者等iss53完成之后,再將iss53分支中的更新并入master

刪除遠程分支:

$ git push origin --delete BranchName>

查看遠程分支:

$ git branch -a

分支的合并

在問題 #53 相關的工作完成之后,可以合并回master分支。實際操作同前面合并hotfix分支差不多,只需回到master分支,運行git merge命令指定要合并進來的分支:

$ git checkout master
$ git merge iss53
Auto-merging README
Merge made by the 'recursive' strategy.
 README | 1 +
 1 file changed, 1 insertion(+)

請注意,這次合并操作的底層實現(xiàn),并不同于之前hotfix的并入方式。因為這次你的開發(fā)歷史是從更早的地方開始分叉的。由于當前master分支所指向的提交對象(C4)并不是iss53分支的直接祖先,Git 不得不進行一些額外處理。就此例而言,Git 會用兩個分支的末端(C4 和 C5)以及它們的共同祖先(C2)進行一次簡單的三方合并計算。圖 3-16 用紅框標出了 Git 用于合并的三個提交對象:


圖 3-16. Git 為分支合并自動識別出最佳的同源合并點。

這次,Git 沒有簡單地把分支指針右移,而是對三方合并后的結果重新做一個新的快照,并自動創(chuàng)建一個指向它的提交對象(C6)(見圖 3-17)。這個提交對象比較特殊,它有兩個祖先(C4 和 C5)。

值得一提的是 Git 可以自己裁決哪個共同祖先才是最佳合并基礎;這和 CVS 或 Subversion(1.5 以后的版本)不同,它們需要開發(fā)者手工指定合并基礎。所以此特性讓 Git 的合并操作比其他系統(tǒng)都要簡單不少。


圖 3-17. Git 自動創(chuàng)建了一個包含了合并結果的提交對象。

既然之前的工作成果已經(jīng)合并到master了,那么iss53也就沒用了。你可以就此刪除它,并在問題追蹤系統(tǒng)里關閉該問題。

$ git branch -d iss53

遇到?jīng)_突時的分支合并

有時候合并操作并不會如此順利。如果在不同的分支中都修改了同一個文件的同一部分,Git 就無法干凈地把兩者合到一起(譯注:邏輯上說,這種問題只能由人來裁決。)。如果你在解決問題 #53 的過程中修改了hotfix中修改的部分,將得到類似下面的結果:

$ git merge iss53
Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.

Git 作了合并,但沒有提交,它會停下來等你解決沖突。要看看哪些文件在合并時發(fā)生沖突,可以用git status查閱:

$ git status
On branch master
You have unmerged paths.
 (fix conflicts and run "git commit")

Unmerged paths:
 (use "git add file>..." to mark resolution)

    both modified:   index.html

no changes added to commit (use "git add" and/or "git commit -a")

任何包含未解決沖突的文件都會以未合并(unmerged)的狀態(tài)列出。Git 會在有沖突的文件里加入標準的沖突解決標記,可以通過它們來手工定位并解決這些沖突。可以看到此文件包含類似下面這樣的部分:

 HEAD
div id="footer">contact : email.support@github.com/div>
=======
div id="footer">
 please contact us at support@github.com
/div>
>>>>>>> iss53

可以看到=======隔開的上半部分,是HEAD(即master分支,在運行merge命令時所切換到的分支)中的內(nèi)容,下半部分是在iss53分支中的內(nèi)容。解決沖突的辦法無非是二者選其一或者由你親自整合到一起。比如你可以通過把這段內(nèi)容替換為下面這樣來解決:

div id="footer">
please contact us at email.support@github.com
/div>

這個解決方案各采納了兩個分支中的一部分內(nèi)容,而且我還刪除了=======>>>>>>>這些行。在解決了所有文件里的所有沖突后,運行git add將把它們標記為已解決狀態(tài)(譯注:實際上就是來一次快照保存到暫存區(qū)域。)。因為一旦暫存,就表示沖突已經(jīng)解決。如果你想用一個有圖形界面的工具來解決這些問題,不妨運行git mergetool,它會調(diào)用一個可視化的合并工具并引導你解決所有沖突:

$ git mergetool

This message is displayed because 'merge.tool' is not configured.
See 'git mergetool --tool-help' or 'git help config' for more details.
'git mergetool' will now attempt to use one of the following tools:
opendiff kdiff3 tkdiff xxdiff meld tortoisemerge gvimdiff diffuse diffmerge ecmerge p4merge araxis bc3 codecompare vimdiff emerge
Merging:
index.html

Normal merge conflict for 'index.html':
 {local}: modified file
 {remote}: modified file
Hit return to start merge resolution tool (opendiff):

如果不想用默認的合并工具(Git 為我默認選擇了opendiff,因為我在 Mac 上運行了該命令),你可以在上方"merge tool candidates"里找到可用的合并工具列表,輸入你想用的工具名。我們將在第七章討論怎樣改變環(huán)境中的默認值。

退出合并工具以后,Git 會詢問你合并是否成功。如果回答是,它會為你把相關文件暫存起來,以表明狀態(tài)為已解決。

再運行一次git status來確認所有沖突都已解決:

$ git status
On branch master
Changes to be committed:
 (use "git reset HEAD file>..." to unstage)

    modified:  index.html

如果覺得滿意了,并且確認所有沖突都已解決,也就是進入了暫存區(qū),就可以用git commit來完成這次合并提交。提交的記錄差不多是這樣:

Merge branch 'iss53'

Conflicts:
 index.html
#
# It looks like you may be committing a merge.
# If this is not correct, please remove the file
#    .git/MERGE_HEAD
# and try again.
#

如果想給將來看這次合并的人一些方便,可以修改該信息,提供更多合并細節(jié)。比如你都作了哪些改動,以及這么做的原因。有時候裁決沖突的理由并不直接或明顯,有必要略加注解。

總結

到此這篇關于Git 分支的新建與合并的文章就介紹到這了,更多相關Git 分支內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • 解決idea git切換多個分支后maven不生效的問題
  • git push 本地項目推送到遠程分支的方法(git命令版)
  • git 將本地文件(夾)上傳到gitee指定分支的處理方法
  • 詳解git使用小結(本地分支與遠程分支、git命令)
  • idea手動刷新git分支的詳細教程
  • IDEA怎么切換Git分支的實現(xiàn)方法
  • idea+git合并分支解決沖突及詳解步驟
  • 如何使用Git實現(xiàn)切換分支開發(fā)過程解析

標簽:鄂爾多斯 錫林郭勒盟 哈爾濱 雙鴨山 襄陽 莆田 丹東 遵義

巨人網(wǎng)絡通訊聲明:本文標題《淺析Git 分支的新建與合并》,本文關鍵詞  淺析,Git,分支,的,新建,與,;如發(fā)現(xiàn)本文內(nèi)容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《淺析Git 分支的新建與合并》相關的同類信息!
  • 本頁收集關于淺析Git 分支的新建與合并的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    精品sm在线观看| 九一久久久久久| 91亚洲大成网污www| 亚洲精品电影院| 久久久久久久久岛国免费| 免费高清不卡av| 这里只有精品在线观看视频| 欧美三级一区二区| 亚洲精品成人精品456| 99精品视频在线播放观看| avove在线播放| 国产精品久久久爽爽爽麻豆色哟哟| 国产又黄又大久久| 久久精品色妇熟妇丰满人妻| 久久精品亚洲精品国产欧美kt∨ | 久热这里有精品| 国产精品丝袜黑色高跟| 国产成人超碰人人澡人人澡| 国产精品麻豆免费版现看视频| 国产日产欧美一区二区视频| 国产精品乡下勾搭老头1| 久久久免费看片| 国产欧美日韩综合| 成人一区二区三区| 在线视频一区二区三区| 亚洲精品乱码久久久久久久久| av一区二区三区四区| 色综合久久久久综合| 亚洲激情中文1区| 国产午夜在线一区二区三区| 在线播放中文一区| 美美哒免费高清在线观看视频一区二区 | 国产.精品.日韩.另类.中文.在线.播放| 国产3级在线观看| 国产精品成人免费在线| 99久久亚洲一区二区三区青草| 欧美系列在线观看| 性欧美疯狂xxxxbbbb| 熟女少妇一区二区三区| 久久众筹精品私拍模特| 国产精品亚洲成人| 色狠狠色狠狠综合| 日韩黄色免费网站| 成年人看的免费视频| 国产精品电影一区二区| 黄色片子免费看| 日韩一区二区高清| 国产91精品一区二区| 欧美在线观看视频在线| 日产欧产美韩系列久久99| 欧美激情 一区| 亚洲少妇屁股交4| 亚洲视频在线播放免费| 久久一区二区三区四区| 99在线精品视频| 日韩一区二区免费在线电影| 国产成人亚洲综合a∨猫咪| 在线观看三级视频欧美| 美女免费视频一区二区| 色8久久人人97超碰香蕉987| 青青草国产精品亚洲专区无| 秋霞欧美一区二区三区视频免费 | 日本在线视频播放| 欧美大片国产精品| 99热这里都是精品| 欧美第一区第二区| jizz一区二区| 欧美成人精品3d动漫h| www.日韩大片| 欧美不卡在线视频| caoporen国产精品视频| 日韩欧美国产综合在线一区二区三区| 成人做爰69片免费看网站| 69堂亚洲精品首页| 大尺度一区二区| 日韩一级成人av| jizzjizzjizz欧美| 久久久美女毛片| 中国男女全黄大片| 欧美激情资源网| 9.1成人看片| 亚洲裸体xxx| 一区二区三区在线观看免费视频| 一区二区三区不卡在线观看| 熟女少妇内射日韩亚洲| 亚洲网友自拍偷拍| 极品盗摄国产盗摄合集| 久久成人免费电影| 在线播放中文一区| 91日韩精品一区| 欧美国产欧美亚州国产日韩mv天天看完整| 五月天丁香社区| 日韩码欧中文字| 黄色激情小视频| 麻豆成人综合网| 欧美剧在线免费观看网站| 99久久精品免费| 中文字幕第一区综合| 日韩乱码人妻无码中文字幕久久| 亚洲综合成人在线视频| 999精品视频在线观看播放| 免费在线观看一区| 欧美日韩国产免费一区二区| av午夜一区麻豆| 国产偷v国产偷v亚洲高清| 双性尿奴穿贞c带憋尿| 伊人色综合久久天天人手人婷| 男人天堂资源网| 久久精品国产第一区二区三区| 欧美日本在线看| 少妇性l交大片7724com| 18欧美亚洲精品| 91高清免费观看| 国产毛片精品视频| 久久中文字幕电影| 亚洲天堂岛国片| 久久精品72免费观看| 日韩女优av电影| www国产视频| 亚洲123区在线观看| 欧美日本免费一区二区三区| 亚洲区 欧美区| 夜夜嗨av一区二区三区四季av| 色婷婷av一区二区三区之一色屋| 高清视频一区二区| 中文久久乱码一区二区| 国产亚洲精品久久久久久豆腐| 国产一区二区三区在线观看免费视频| 精品国产一区二区精华| 色噜噜日韩精品欧美一区二区| 蜜桃免费网站一区二区三区| 日韩精品一区二区在线| 能免费看av的网站| 久久精品99国产精品| 久久久久久久电影| 欧美88888| 春色校园综合激情亚洲| 中文字幕在线观看不卡| 一本大道久久a久久精品综合| av亚洲精华国产精华| 一区二区在线观看av| 欧美日韩久久一区| 久久久国产精品无码| 麻豆精品新av中文字幕| 欧美精品一区二区三区四区| 国产黄色大片免费看| 国产99久久久国产精品潘金| 中文字幕一区av| 欧美日韩国产一级二级| 日本japanese极品少妇| 经典三级在线一区| 欧美国产在线观看| 一本到不卡免费一区二区| 国产大学生av| 日本在线播放一区二区三区| www成人在线观看| 精品无码一区二区三区蜜臀| 99精品国产99久久久久久白柏| 亚洲一线二线三线久久久| 91精品久久久久久蜜臀| 国产av自拍一区| 国产精品资源在线看| 亚洲人一二三区| 欧美一区二区三区免费视频| 国产探花视频在线播放| 成人av影院在线| 午夜亚洲福利老司机| 久久综合久色欧美综合狠狠| 波多野结衣喷潮| 伊人久久久久久久久| 免费在线观看一区| 国产精品家庭影院| 欧美乱妇15p| 少妇人妻好深好紧精品无码| 成人免费毛片a| 日韩激情在线观看| 国产精品人妖ts系列视频| 欧美日韩国产另类一区| 波多野结衣一二三四区| 99久久综合精品| 久久精品久久精品| 亚洲人成网站在线| 日韩精品一区二区三区中文不卡| 日本午夜在线观看| 国模私拍在线观看| 国产成人午夜视频| 亚洲国产色一区| 国产欧美日产一区| 在线成人免费观看| 美国黄色小视频| 最新中文字幕视频| 99精品视频免费在线观看| 久久精工是国产品牌吗| 一区二区三区在线影院| 精品88久久久久88久久久| 色av综合在线| 丁香六月激情综合| 黄色国产在线观看| 99精品1区2区| 国产一区二区影院|