簡體   English   中英

分支的git merge子文件夾

[英]git merge subfolder of branch

我敢肯定這種情況很普遍,但是我還沒有在git中找到有關如何處理它的任何信息。


到目前為止,這是發生了什么:

想象一下git repo中的以下文件夾結構:

/server
/client
.gitignore

該回購包含客戶端服務器應用程序的服務器代碼和客戶端代碼。

這是master分支的修訂歷史記錄:

a01... (changes /server content)
b02... (changes /client content)
c03... (changes /server content)
d04... (changes /client content)
c05... (changes /server content)
d06... (changes /client content)

此時,我們選擇提交b02並在其中創建一個新的分支server_v2 在該分支上,我們進行兩次提交e07..e08.. 這是server_v2的修訂歷史:

a01... (changes /server content)
b02... (changes /client content)  <---- here, master and server_v2 are forked
e07... (changes /server content)
e08... (changes /server content)

這是修訂圖:

a01
b02
 * *
 *    *
 *       *
 *          *
c03            *
d04               *
c05                  *
d06 <-- master          *
                       e07
                       e08 <-- server_v2

請注意,所有提交僅影響一個子文件夾,並且提交哈希的第一個字符指示哪個:

a: commit on /server, before the fork
b: commit on /client, before the fork
c: commit on /server, only in master
d: commit on /client, only in master
e: commit on /server, only in server_v2

這是我們正在嘗試做的事情:

現在,我們要使服務器的2.0版聯機。 因此,我們希望master包含e07e08提交,而不是c03c05提交。 這就是我們希望分支看起來像的樣子:

master:     a01, b02, d04, d06, e07, e08
server_v1:  a01, b02, c03, c05

換句話說, master應該包含新服務器( e07e08 )以及客戶端上的更改( d04d06 )。 server_v1應該包含舊服務器( c03c05 )。

選項1:

我們可以重命名分支:

master    --> server_v1
server_v2 --> master

現在master確實包含新的服務器版本。

問題:我們丟失了/client上的d04d06提交。

選項2:

server_v2合並到master 現在,修訂圖如下所示:

a01
b02
 * *
 *    *
 *       *
 *          *
c03            *
d04               *
c05                  *
d06                     *
 *                     e07
 *                     e08 <-- server_v2
 *                   *
 *               *
 *           *
 *       *
 *   *
[merge] <-- master

問題:這樣, c03c05提交是master一部分。 我們不希望舊服務器上的更改成為新的master分支的一部分。

有沒有辦法做到這一點?

git checkout master

git checkout -b server_v1 ## create server_v1 branch as off the current master

git checkout master
git revert c03  ##revert commits you don't need
git revert c05 

git merge server_v2 ##merge your server_v2 changes into master (you can also rebase server_v2 onto master and fast-forward master to server_v2 if you want linear history)

而已。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM