5

我担心的是,我在另一个本地分支中有旧的提交 [包含 abc.cpp,def.cpp]。

现在几个月后我想使用这些更改,但是在我当前的分支中 abc.cpp 已升级。那么,如果我选择樱桃,它会将旧 abc.cpp 的更改整合到新的 abc.cpp [最近的工作目录副本] 中吗?

4

3 回答 3

8

git-cherry-pick(1) 手册页说:

给定一个或多个现有提交,应用每个引入的更改,并为每个提交记录一个新的提交。这要求您的工作树是干净的(不修改 HEAD 提交)。

用简单的英语来说,这意味着git cherry-pick将提交从一个分支应用到另一个分支,但不会像适当的合并那样保留来自另一个分支的原始历史或祖先。

将其视为应用一系列选定的补丁,而不是两个历史分支的完全合并。显然,如果您倾向于进行非常小的原子提交,那么挑选樱桃看起来就像应用一个编写良好的补丁。但是,由于您没有像合并或变基那样的共同祖先,因此如果您的提交不是小而孤立的,您可能需要解决更多的冲突。

挑选樱桃是否是一个好主意在很大程度上取决于您如何构建提交。如果它不适合你,你总是可以用git format-patchand来做更多的手动操作git apply

于 2012-06-28T12:21:48.193 回答
4

是的,它就是这样做的。cherry-pick正在将提交(或其中的一个范围)作为补丁应用到您的分支(嗯,几乎作为补丁)。

由于分支上发生了独立修改,因此您可能会遇到冲突(例如合并分支时)。

于 2012-06-28T11:36:25.937 回答
2

请注意,使用git1.8.5/1.9 (Q4 2013), git cherry-pick 现在可以轻松地从“上一个分支”中挑选:

就像“ git checkout -”知道签出和“ git merge -”知道合并您之前所在的分支一样,“ git cherry-pick”现在理解“ git cherry-pick -”从前一个分支中选择。

请参阅Hiroshige Umino (yaotti)提交 182d7d

cherry-pick: 允许" -"作为' @{-1}'的缩写

" -" 缩写对于 " cherry-pick" like "checkout和 " merge" 很方便。

-一个 " " 代表上一个分支的名称,其中一个分支名称被接受,它不能表示任何其他东西,如 stdin ,这也有利于统一

于 2013-09-23T07:43:49.353 回答