Cherry-picking正在应用从任意提交中复制的一系列差异到存储库的当前状态。如果其中一些差异与存储库的当前状态不一致会发生什么?例如,如果其中一个差异修改了文件f,但当前存储库中不再存在该文件,该怎么办?
答案 0 :(得分:2)
在这种情况下,会发生冲突。 Git停下樱桃挑选,等待你解决冲突或中止樱桃挑选。从概念上讲,这与a conflict that might arise due to a git merge
或git rebase
相同。
如果其中一个差异修改了文件f,但该文件在当前存储库中不再存在
Git会向您提供选择保留文件的选择,保留文件删除或手动更新文件。
很容易看出它是如何工作的。
在您的文件系统中的某个位置(在现有Git存储库之外),创建一个新目录并输入它。
mkdir cherry
cd cherry
初始化一个空的Git存储库
git init
创建文件并向其添加一些内容
echo "Some changes" > README.md
将文件添加到索引并提交更改
git add README.md
git commit -m "Added some content to the readme"
创建并签出新分支
git checkout -b feature/readme-update
再次更改README.md
文件
echo "New content of README" > README.md
分阶段并提交更改
git add README.md
git commit -m "Added more to readme"
保存上次提交的哈希值。
返回master
并删除文件,提交更改
git checkout master
git rm README.md
git commit -m "Removed the readme"
Cherry-从feature/readme-update
中选择您更改README.md
文件内容的提交
git cherry-pick <commit-hash>
你手上有冲突
tomek@LAPTOP-SGL6966J 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'
tomek@LAPTOP-SGL6966J 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