git merge


git merge
一 簡單的git merge操作
git fetch和git merge相當於git pull,我們可以通過intellij的VCS來merge,也可以通過命令行來merge
1.通過工具直接操作:
如果是用intellij,可以選擇VCS->Git->Merge Changes
這里的current branch就是當前分支,branch to merge就是要合並的分支。
 
2.使用命令行
如果要把b分支merge到a分支,那么需要:
git checkout a        //將當前的branch切換到a
git merge b     //將b merge到a
git branch -d b  //將b分支刪除
當用git merge 進行合並(merge)的時候,你只是指定了要合並到當前分支的那個並入分支,以及當前分支的當前進展。
 
二 項目中的實際流程
實際工作中你可能經歷以下步驟:
1.為了實現系統的新需求,你要創建一個新分支
2.突然發現主分支上有bug,你要新建一個分支來解決這個bug
3.分支上的bug解決后,你要切換到主分支合並bug分支
4.切換到最初的分支上,繼續工作
 
1.加入你正在自己的項目上,並且該項目已經有了一些提交,提交版本如下,並且當前版本在c2上
2.為了解決#53問題,需要新建一個分支並切到該分支上:
git checkout -b iss53
3.iss53分支不斷推進,並有緊急問題出現
對iss53問題進行了一些提交,分支在不斷的向前推進
此時你收到消息,有個其他問題也要解決,你不必將這個緊急問題與iss53的修改混在一起,你只需要切回master分支
git checkout master
注意:當你切換分支的時候,git會重置你的目錄,使其看起來像是回到了你在那個分支上最后一次提交的樣子。Git 會自動添加、刪除、修改文件以確保此時你的工作目錄和這個分支最后一次提交時的樣子一模一樣。
為了修復這個緊急問題,你需要再建一個分支,直到問題解決
git checkout -b hotfix
4.基於master分支的緊急問題分支hotfix branch
運行測試,以確保自己的修改時正確的,合並到master上。
git checkout master
git merge hotfix
注意:你可能會在合並結果中看到"快進"(fast-forward)。由於當前 master 分支所指向的提交是你當前提交(有關 hotfix 的提交)的直接上游,所以 Git 只是簡單的將指針向前移動。 換句話說,當你試圖合並兩個分支時,如果順着一個分支走下去能夠到達另一個分支,那么 Git 在合並兩者的時候,只會簡單的將指針向前推進(指針右移),因為這種情況下的合並操作沒有需要解決的分歧——這就叫做 “快進(fast-forward)”。
現在,最新的修改已經在 master 分支所指向的提交快照中,你可以着手發布該修復了。
5.master被快進到hotfix
由於被緊急問題打斷,現在你需要回到之前的工作,可以刪除掉hotfix分支
git branch -d hotfix
切換到之前的分支繼續工作
git checkout iss53
此時如果你想要拉去之前hotfix的修改,你可以使用git merge master命令將master分支合並到iss53中;或者將iss53完成后,將其合並到master分支上。
6.將iss53合並到master上
git checkout master
git merge iss53
注意,雖然命令行和之前合並hotfix時是一樣的,但是結果看起來不一樣
因為,master 分支所在提交並不是 iss53 分支所在提交的直接祖先,Git 不得不做一些額外的工作。 出現這種情況的時候,Git 會使用兩個分支的末端所指的快照(C4 和 C5)以及這兩個分支的工作祖先(C2),做一個簡單的三方合並。
和之前將分支指針向前推進所不同的是,Git 將此次三方合並的結果做了一個新的快照並且自動創建一個新的提交指向它。 這個被稱作一次合並提交,它的特別之處在於他有不止一個父提交。

 

7.刪除iss53分支
git branch -d iss53
 
merge時有沖突
如果你在兩個不同的分支中,對同一個文件的同一個部分進行了不同的修改,Git 就沒法干凈的合並它們。Git 做了合並,但是沒有自動地創建一個新的合並提交。 Git 會暫停下來,等待你去解決合並產生的沖突。  
git status 命令來查看那些因包含合並沖突而處於未合並(unmerged)狀態的文件,找到這些文件,手動解決沖突就可以git commit來完成合並提交了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM