git cherry-pick的使用
git cherry-pick <commit id>
是用来将其他某个分支上的某次commit复制到当前分支
假设你的项目提交历史如下:(箭头相当于一个指针,表示当前这个commit是基于指向的那个commit修改的,HEAD也是一个这样的指针)
如果你希望将提交 e43a6 拉取到 master 分支,你可以执行:
$ git checkout master # 第一步:想要将某次commit应用于master,则先切换到该分支 $ git cherry-pick e43a6 # 第二步:将ruby_client分支上的这个commit pick到当前分支(当然需要提前知道这个commit id) Finished one cherry-pick. [master]: created a0a41a9: "More friendly message when locking the index fails." 3 files changed, 17 insertions(+), 3 deletions(-)
这样会拉取和 e43a6 相同的更改,但是因为应用的日期不同,你会得到一个新的提交 SHA-1 值。 现在你的历史会变成这样:
现在你可以删除这个特性分支(ruby_client),并丢弃不想拉入的提交(5ddae)。
需要说明的是,提取某次提交的“补丁”,这个补丁是基于其父提交的。也就是说,如果这个commit所在的分支在这个commit之前的父代码与当前分支当前的代码不一致,则有可能产生冲突。
例如下面的master比dev分支在同一个地方代码不一致,少了一次提交:
而dev分支上多了一次提交(多了注释more comment):
现在我们想把214ae这次提交pick到master,则会产生冲突:
需要手动解决冲突后再git add/git commit来将这次cherry-pick提交上去
注意: