git cherry pick<commit>做什么?
当前回答
官方文件摘录:
给定一个或多个现有提交,对每个提交应用更改介绍,记录每个人的新提交。这需要您工作树是干净的(没有来自HEAD提交的修改)。当不清楚如何应用更改时,会发生以下情况:当前分支和HEAD指针停留在上次提交时成功制作。CHERRY_PICK_HEAD引用设置为指向引入的提交难以应用的更改。干净应用更改的路径在索引文件和工作树中。对于冲突的路径,索引文件最多记录三个版本,如如gitmerge的“TRUE MERGE”部分所述。工作树文件将包含冲突的描述通常的冲突标记是>>>>>>和>>>>>>>>。未进行其他修改。
阅读更多。。。
其他回答
Git中的Cherry picking旨在将一些提交从一个分支应用到另一个分支。如果您犯了一个错误,并将更改提交到错误的分支,但不想合并整个分支,则可以这样做。你可以恢复提交,然后在另一个分支上重新选择。
要使用它,您只需要gitcherry-pick-hash,其中hash是来自其他分支的提交哈希。
有关完整程序,请参阅:http://technosophos.com/2009/12/04/git-cherry-picking-move-small-code-patches-across-branches.html
官方文件摘录:
给定一个或多个现有提交,对每个提交应用更改介绍,记录每个人的新提交。这需要您工作树是干净的(没有来自HEAD提交的修改)。当不清楚如何应用更改时,会发生以下情况:当前分支和HEAD指针停留在上次提交时成功制作。CHERRY_PICK_HEAD引用设置为指向引入的提交难以应用的更改。干净应用更改的路径在索引文件和工作树中。对于冲突的路径,索引文件最多记录三个版本,如如gitmerge的“TRUE MERGE”部分所述。工作树文件将包含冲突的描述通常的冲突标记是>>>>>>和>>>>>>>>。未进行其他修改。
阅读更多。。。
这有点像复制(从某处)和粘贴(到某处),但用于特定的提交。
例如,如果您想进行热修复,那么可以使用樱桃采摘功能。
在一个开发分支中进行樱桃采摘,并将其合并到一个发布分支中。同样,从一个释放树枝上摘樱桃给主人。沃伊拉
它将对当前分支应用特定的提交。
这意味着:
将添加此提交添加的所有文件将删除此提交删除的所有文件将合并此提交修改的所有文件。这意味着提交后的整个文件,而不仅仅是提交后的更改!
示例:考虑提交A
added newFileA
modified main:
+ import './newFileA'
提交B
added newFileB
modified main:
+ import './newFileB'
如果你在另一个分支上选择commit B,你将得到:
/newFileB
/main :
import './newFileA'
import './newFileB'
由于commit B包含newFileB和main,但没有newFileA,因此会导致错误,因此请谨慎使用。
你可以想一想,如果樱桃采摘类似于重基,或者更确切地说,它是像重基一样管理的。我的意思是,它接受一个现有的提交,并以当前所在分支的负责人为起点重新生成它。
rebase接受一个具有父级X的提交,并重新生成该提交,就像它实际上具有父级Y一样,这正是cherry pick所做的。
Cherry pick更关注如何选择提交。使用pull(rebase),git会在拉到分支的内容上隐式地重新生成本地提交,但使用cherry-pick,您会显式地选择一些提交,并在当前分支上隐式重新生成。
因此,您的操作方式有所不同,但本质上它们是非常相似的操作-提交的再生。
推荐文章
- Visual Studio代码如何解决合并冲突与git?
- 无法推送到远程分支,无法解析到分支
- Git:如何将数据库重置为特定的提交?
- 如何在合并期间使用Git和命令行保存本地文件或远程文件?
- 能够用一个命令推到所有git遥控器?
- 重新基于Git合并提交
- 忽略已经签入目录的内容?
- 如何从windows cmd保存git提交消息?
- (Mac) -bash: __git_ps1:命令未找到
- 如何删除多个已删除的文件在Git仓库
- 使用vimdiff查看所有' git diff '
- 如何拉特定的目录与git
- 本地存储库中的文件与源文件之间的差异
- 将Git存储库内容移动到另一个存储库,保存历史记录
- 如何在GitHub上创建自己的存储库?