鍍金池/ 問答/Linux/ 兩個(gè)分支diff,怎樣操作更便捷?

兩個(gè)分支diff,怎樣操作更便捷?

之前一直在master分支開發(fā),后期folk了一個(gè)dev分支,然后就一直在dev分支上開發(fā),開發(fā)了很多東西,增/刪/改等等,dev和master的內(nèi)容已經(jīng)有了很大不同,其實(shí)已經(jīng)是兩套工程代碼了,比如master是通用版本,dev是針對(duì)某用戶專門定制的版本:master和dev都有各自獨(dú)有的內(nèi)容,也有公共部分,公共部分以dev為準(zhǔn)。

現(xiàn)在想把dev上公共部分修改的內(nèi)容合并到master上,但是感覺肯定不能直接merge,沖突太復(fù)雜了。
我現(xiàn)在想以dev分支為基礎(chǔ),folk出一個(gè)dev2分支,在dev2中,首先刪除掉dev獨(dú)有的內(nèi)容,然后把master上獨(dú)有的內(nèi)容以及有修改的一些內(nèi)容手動(dòng)拷過來(lái)。如果這樣做,怎么樣diff兩個(gè)分支改比較方便呢?或者有其他更便利的做法嗎?

PS:使用的編輯器是vscode

回答
編輯回答
墨小白

不建議使用拷貝代碼的方式,血淚的教訓(xùn),會(huì)非常容易出錯(cuò)。

建議方法是使用 cherry-pick。

如果你通用性的代碼和定制的代碼在提交時(shí)候就有意的分開在不同的commit里,那么使用cherry-pick的方法會(huì)非常容易。如果沒有的話也沒有關(guān)系,在cherry-pick過程中去將無(wú)需改動(dòng)的部分拷貝回來(lái)就行。

總的過程就是在master分支上把dev分支的這些commit使用 git cherry-pick $commit_id 一個(gè)一個(gè)的放到master分支里。

有幾種情況:

  1. 沒沖突、也沒定制代碼的commit:執(zhí)行完git cherry-pick就行了。
  2. 沒沖突,有定制代碼的commit:則cherry-pick完成后git reset HEAD~1,手動(dòng)修改一下去掉那些定制的代碼,然后git add; git commit正常的提交commit。
  3. 有沖突,沒定制代碼的commit: 處理沖突即可。
  4. 有沖突,有定制代碼的commit:建議先cherry-pick處理沖突,完成并提交后。git reset HEAD~1,手動(dòng)修改一下去掉那些定制的代碼,然后git add; git commit正常的提交commit。

其中處理沖突的過程為:

  • 先修改沖突的文件
  • 隨后git add
  • 然后git cherry-pick --continue(注意不是git commit)
  • 如果cherry-pick之后又覺得此commit完全不需要,則可以git cherry-pick --abort
2018年2月25日 06:01