2017-04-08 131 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