2017-07-31 147 views
0

我是櫻桃選擇從分支A到分支B的分支。分支A是分支B之前的許多提交,並且我想忽略分支A中的一些先前提交併挑選未來提交。例如,分支A提交1,2,3,4,5,6,分支B只有1,2,我想從分支A中選擇提交6到分支B.結果我沒有意識到提交6更改提交5中引入的文件(哪個分支B沒有)。但是在試圖挑選6(到B分支)時,git並沒有顯示提交5中引入的文件是衝突。當我選擇提交時,我剛剛丟失了該文件中所做的更改。是否期望?我做錯了嗎?當文件不存在時git cherry-pick不顯示衝突?

我跑的命令只是「混帳櫻桃採摘<提交-ID >」

+0

當您正在進行櫻桃挑選的提交嘗試覆蓋現有文件並且無法使用「自動合併」時,您會發生衝突。如果沒有文件,則不存在衝突:自動合併確定新文件是要保留的文件。 (如果我理解了這個想法)。 –

+0

對不起,不好解釋。問題是它甚至沒有保留新文件。它只是沒有找到該文件(在提交5中引入)來應用更改(在提交6中引入),並且什麼都沒做。該文件從提交中消失。 –

+0

這很奇怪。我發現git實際上創建了一個新的文件,其中提交5和6的更改(即該文件的提交6的最終狀態)在我的樹中完全不同的目錄中,並且具有完全不同的文件名。它創建了一個文件「src/test/resources/RefreshedJarClassV2.txt」,而原來的文件被稱爲「Constants.java」。發生什麼事! –

回答

0

由於提交6具有未分支B存在,當你摘櫻桃提交6路徑/文件src/test/resources/RefreshedJarClassV2.txt分支B。將顯示未合併路徑,您應該將此路徑標記爲當前工作目錄。詳細步驟如下:

如果你已經摘櫻桃提交6分支B如下圖,

1---2---6'   Branch B 
    \ 
     3---4---5---6 Branch A 

你應該重新設置分支B爲原文:

git checkout B 
git reset --hard <commit id for 2> 

然後分支結構將看起來像原始的:

1---2    Branch B 
    \ 
     3---4---5---6 Branch A 

現在摘櫻桃再犯6

git cherry-pick <commit id for 6> 
git add . 
git cherry-pick --continue 

和路徑和文件src/test/resources/RefreshedJarClassV2.txt將在分支B顯示。