2017-04-08 125 views
0

櫻桃選取正在將從任意提交複製的差異序列應用於存儲庫的當前狀態。如果其中一些差異與存儲庫的當前狀態不一致,會發生什麼情況?例如,如果其中一個diff修改了一個文件f,但是這個文件不再存在於當前倉庫中呢?從與存儲庫當前狀態不一致的提交中摘櫻桃

回答

2

在這種情況下,會發生衝突。 Git暫停了櫻桃選擇,並等待你解決衝突或中止挑選櫻桃。從概念上講,這與a conflict that might arise due to a git mergegit rebase相同。

如果diff文件的一個修改什麼文件f,但在當前庫

的Git將提交你的選擇保持文件之間你挑肥揀瘦這個文件不再存在,保持文件被刪除或手動更新文件。

很容易看到它是如何工作的。

  1. 在您的文件系統中的某處(現有Git存儲庫之外),創建一個新目錄並輸入它。

    mkdir cherry 
    cd cherry 
    
  2. 初始化一個空的Git倉庫

    git init 
    
  3. 創建一個文件,並添加一些內容到它

    echo "Some changes" > README.md 
    
  4. 將文件添加到索引並提交更改

    git add README.md 
    git commit -m "Added some content to the readme" 
    
  5. 創建並檢查了一個新的分支

    git checkout -b feature/readme-update 
    
  6. 更改README.md文件再次

    echo "New content of README" > README.md 
    
  7. 舞臺並提交更改

    git add README.md 
    git commit -m "Added more to readme" 
    

    保存最後的哈希提交。

  8. 回去master和刪除文件,提交更改

    git checkout master 
    git rm README.md 
    git commit -m "Removed the readme" 
    
  9. 摘櫻桃從feature/readme-update,你改變了README.md文件

    git cherry-pick <commit-hash> 
    
  10. 您的內容提交在你手上有衝突

    [email protected] MINGW64 /c/repos/cherry (master) 
    $ git cherry-pick <commit-hash> 
    error: could not apply 4a99ca7... Added more to readme 
    hint: after resolving the conflicts, mark the corrected paths 
    hint: with 'git add <paths>' or 'git rm <paths>' 
    hint: and commit the result with 'git commit' 
    
    [email protected] MINGW64 /c/repos/cherry (master|CHERRY-PICKING) 
    

    git status還會告訴你同一件事

    $ git status 
    On branch master 
    You are currently cherry-picking commit 4a99ca7. 
        (fix conflicts and run "git cherry-pick --continue") 
        (use "git cherry-pick --abort" to cancel the cherry-pick operation) 
    
    Unmerged paths: 
        (use "git add/rm <file>..." as appropriate to mark resolution) 
    
        deleted by us: README.md 
    

    在這種情況下,你可以刪除文件(接受master的變化),或添加它(接受更改你挑肥揀瘦)。另一種選擇是以您認爲合理的方式手動調整文件。

    無論什麼樣的變化,你接受,並將其應用到文件,將它們暫存並繼續摘櫻桃通過調用git cherry-pick --continue

    如果你困惑,不再想用櫻桃挑選來進行,通過呼叫中止它git cherry-pick --abort