2017-04-08 5 views
0

チェリーピッキングは、任意のコミットからコピーされた一連の差分をリポジトリの現在の状態に適用しています。これらの差分の一部がリポジトリの現在の状態と矛盾している場合はどうなりますか?たとえば、diffのうちの1人がファイルfを変更するが、このファイルが現在のリポジトリに存在しなくなったらどうなるでしょうか?リポジトリの現在の状態と一致しないコミットからのチェリーピック

答えて

2

このような状況では、競合が発生します。 Gitはチェリーピックを一時停止し、あなたが紛争を解決するか、チェリーピックを中止するのを待ちます。概念的には、これはa conflict that might arise due to a git mergeまたはgit rebaseと同じです。

の差分の一つは、ファイル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" 
    

    変更をコミットコミット最後のハッシュを保存。

    バックmasterから
  8. 移動し、ファイルを削除し、変更をコミット

    git checkout master 
    git rm README.md 
    git commit -m "Removed the readme" 
    
  9. あなたはあなたがREADME.mdファイルの内容に

    git cherry-pick <commit-hash> 
    
  10. を変更feature/readme-updateからコミットチェリー選びますあなたの手に矛盾があります

    [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はまた、あなたがファイルを削除(masterから変更を受け入れる)か、それを追加することができ、この場合、あなたは同じこと

    $ 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 
    

    を教えてくれます(あなたはチェリーピッキングしている変更を受け入れます)。もう1つの選択肢は、あなたが賢明とみなす方法でファイルを手動で調整することです。

    にかかわらず、あなたはチェリーピックを続行し、もはや混乱しているしない場合git cherry-pick --continue

    を呼び出すことによって、受け入れるファイルに適用、それらをステージとチェリーピックを続行変わるものの、呼び出しによって中止します。git cherry-pick --abort

関連する問題