转自:http://hubingforever.blog.163.com/blog/static/1710405792012587115533/

本文编辑整理自:

git cherry-pick用于把另一个本地分支的commit修改应用到当前分支。
实际问题 
  在本地 master 分支上做了一个commit ( 38361a68138140827b31b72f8bbfd88b3705d77a ) , 如何把它放到 本地 old_cc 分支上? 
办法之一: 使用 cherry-pick.  根据git 文档:
Apply the changes introduced by some existing commits 
就是对已经存在的commit 进行apply (可以理解为再次提交)
简单用法
git cherry-pick <commit id>
例如:
$ git checkout old_cc
$ gitcherry-pick38361a68
1. 如果顺利,就会正常提交。结果:
Finished one cherry-pick.
# On branch old_cc
# Your branch is ahead of 'origin/old_cc' by 3 commits.
. 如果在cherry-pick 的过程中出现了冲突
Automatic cherry-pick failed.  After resolving the conflicts,
mark the corrected paths with 'git add <paths>' or 'git rm <paths>'
and commit the result with: 
 
        git commit -c 15a2b6c61927e5aed6718de89ad9dafba939a90b
 
就跟普通的冲突一样,手工解决:
执行git status 看哪些文件出现冲突
$ git status 
both modified:      app/models/user.rb 
接着手动解决冲突的文件,然后通过git add把改到添加到索引,最后执行git commit提交修改。
$ vim app/models/user.rb   
$ git add app/models/user.rb
git commit -c <原commit号>
git-cherry-pick(1)
==================
 
NAME
----
git-cherry-pick - Apply the changes introduced by some existing commits
 
SYNOPSIS
--------
'git cherry-pick' [--edit] [-n] [-m parent-number] [-s] [-x] [--ff] <commit>...
 
DESCRIPTION
-----------
 
Given one or more existing commits, apply the change each one
introduces, recording a new commit for each.  This requires your
working tree to be clean (no modifications from the HEAD commit).
 
When it is not obvious how to apply a change, the following
happens:
 
1. The current branch and `HEAD` pointer stay at the last commit
   successfully made.
2. The `CHERRY_PICK_HEAD` ref is set to point at the commit that
   introduced the change that is difficult to apply.
3. Paths in which the change applied cleanly are updated both
   in the index file and in your working tree.
4. For conflicting paths, the index file records up to three
   versions, as described in the "TRUE MERGE" section of
   linkgit:git-merge[1].  The working tree files will include
   a description of the conflict bracketed by the usual
   conflict markers `<<<<<<<` and `>>>>>>>`.
5. No other modifications are made.
 
See linkgit:git-merge[1] for some hints on resolving such
conflicts.
 
OPTIONS
-------
<commit>...::
Commits to cherry-pick.
For a more complete list of ways to spell commits, see
linkgit:gitrevisions[7].
Sets of commits can be passed but no traversal is done by
default, as if the '--no-walk' option was specified, see
linkgit:git-rev-list[1].
 
-e::
--edit::
With this option, 'git cherry-pick' will let you edit the commit
message prior to committing.
 
-x::
When recording the commit, append to the original commit
message a note that indicates which commit this change
was cherry-picked from.  Append the note only for cherry
picks without conflicts.  Do not use this option if
you are cherry-picking from your private branch because
the information is useless to the recipient.  If on the
other hand you are cherry-picking between two publicly
visible branches (e.g. backporting a fix to a
maintenance branch for an older release from a
development branch), adding this information can be
useful.
 
-r::
It used to be that the command defaulted to do `-x`
described above, and `-r` was to disable it.  Now the
default is not to do `-x` so this option is a no-op.
 
-m parent-number::
--mainline parent-number::
Usually you cannot cherry-pick a merge because you do not know which
side of the merge should be considered the mainline.  This
option specifies the parent number (starting from 1) of
the mainline and allows cherry-pick to replay the change
relative to the specified parent.
 
-n::
--no-commit::
Usually the command automatically creates a sequence of commits.
This flag applies the changes necessary to cherry-pick
each named commit to your working tree and the index,
without making any commit.  In addition, when this
option is used, your index does not have to match the
HEAD commit.  The cherry-pick is done against the
beginning state of your index.
+
This is useful when cherry-picking more than one commits'
effect to your index in a row.
 
-s::
--signoff::
Add Signed-off-by line at the end of the commit message.
 
--ff::
If the current HEAD is the same as the parent of the
cherry-pick'ed commit, then a fast forward to this commit will
be performed.
 
--strategy=<strategy>::
Use the given merge strategy.  Should only be used once.
See the MERGE STRATEGIES section in linkgit:git-merge[1]
for details.
 
-X<option>::
--strategy-option=<option>::
Pass the merge strategy-specific option through to the
merge strategy.  See linkgit:git-merge[1] for details.
 
EXAMPLES
--------
git cherry-pick master::
 
Apply the change introduced by the commit at the tip of the
master branch and create a new commit with this change.
 
git cherry-pick ..master::
git cherry-pick ^HEAD master::
 
Apply the changes introduced by all commits that are ancestors
of master but not of HEAD to produce new commits.
 
git cherry-pick master{tilde}4 master{tilde}2::
 
Apply the changes introduced by the fifth and third last
commits pointed to by master and create 2 new commits with
these changes.
 
git cherry-pick -n master~1 next::
 
Apply to the working tree and the index the changes introduced
by the second last commit pointed to by master and by the last
commit pointed to by next, but do not create any commit with
these changes.
 
git cherry-pick --ff ..next::
 
If history is linear and HEAD is an ancestor of next, update
the working tree and advance the HEAD pointer to match next.
Otherwise, apply the changes introduced by those commits that
are in next but not HEAD to the current branch, creating a new
commit for each new change.
 
git rev-list --reverse master \-- README | git cherry-pick -n --stdin::
 
Apply the changes introduced by all commits on the master
branch that touched README to the working tree and index,
so the result can be inspected and made into a single new
commit if suitable.
 
The following sequence attempts to backport a patch, bails out because
the code the patch applies to has changed too much, and then tries
again, this time exercising more care about matching up context lines.
 
------------
$ git cherry-pick topic^             <1>
$ git diff                           <2>
$ git reset --merge ORIG_HEAD        <3>
$ git cherry-pick -Xpatience topic^  <4>
------------
<1> apply the change that would be shown by `git show topic^`.
In this example, the patch does not apply cleanly, so
information about the conflict is written to the index and
working tree and no new commit results.
<2> summarize changes to be reconciled
<3> cancel the cherry-pick.  In other words, return to the
pre-cherry-pick state, preserving any local modifications you had in
the working tree.
<4> try to apply the change introduced by `topic^` again,
spending extra time to avoid mistakes based on incorrectly matching
context lines.

git cherry-pick简介(转载)的更多相关文章

  1. git之rebase、merge和cherry pick的区别(面试常问)

    git flow图例镇楼 merge 这个简单,初学者常用.比如主分支是Dev,最新版本是01.然后小明基于此,搞了个feature 分支A,业务:打酱油.然后在上面多次提交,完成功能迭代开发,如A1 ...

  2. Git 常用命令大全-转载

    一. Git 常用命令速查 git branch 查看本地所有分支git status 查看当前状态 git commit 提交 git branch -a 查看所有的分支git branch -r ...

  3. Monte Carlo方法简介(转载)

    Monte Carlo方法简介(转载)       今天向大家介绍一下我现在主要做的这个东东. Monte Carlo方法又称为随机抽样技巧或统计实验方法,属于计算数学的一个分支,它是在上世纪四十年代 ...

  4. Git .gitignore文件简介及使用

    Git .gitignore文件简介及使用 By:授客 QQ:1033553122 .gitignore 这个文件的作用就是告诉Git哪些文件不需要添加到版本管理中.实际项目中,很多文件都是不需要版本 ...

  5. git cherry命令来比较两个分支的不同

    git cherry 命令使用 1. 两个参数的情况 git cherry -v origin/master asa 比较本地的asa分支和远程master的差别 git cherry -v mast ...

  6. HttpClient 与 HtmlParser 简介 转载

    转载地址:https://www.ibm.com/developerworks/cn/opensource/os-cn-crawler/ 本小结简单的介绍一下 HttpClinet 和 HtmlPar ...

  7. [git]Git log 输出格式化(转载)

    转载于:https://havee.me/linux/2015-05/git-pretty-output.html 美化完的格式: git log --graph --pretty=format:'% ...

  8. git操作技巧(转载)

    转载自:https://segmentfault.com/q/1010000000181403 git支持很多种工作流程,我们采用的一般是这样,远程创建一个主分支,本地每人创建功能分支,日常工作流程如 ...

  9. Git分支-分支简介

    源地址:https://git-scm.com/book/zh/ch3-1.html 几乎所有的版本控制系统都以某种形式支持分支. 使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线 ...

随机推荐

  1. iOS开发之UITabBarController和UICollectionView的使用

    这一篇要记录的是iOS开发中UITabBarController控件和UICollectionView控件的使用.APP跑起来之后的效果例如以下图: watermark/2/text/aHR0cDov ...

  2. CPU维修技术

    中央处理单元(Central Process Unit)简称CPU,是电脑的核心部件,负责处理和运算电脑内部所有数据.因其在电脑中的地位相当重要,所以一旦发生故障就会造成很严重的后果. [技术66]开 ...

  3. ADO直接调用ACESS数据库MDB

    1.ADO用ODBC链接不会出现堆栈溢出. 2.直接用ADO链接,因为对象不是NEW出来的,导致其成员变量也是栈上的,数组申请过大,栈溢出. 用VECTOR或者NEW对象,应该能解决.

  4. 超低功耗、无需网关,CSR智能家居蓝牙控制照明方案

    本文转载至 http://blog.csdn.net/justinjing0612/article/details/39250997 [导读] iOS 8 Beta2终于让智能家居HomeKit功能露 ...

  5. 初学unity 3D 遇到的一个问题--预制体选项没有找到。

    没有找到预制体这个选项. 我的工程如下:

  6. TypeError: 'module' object is not callable 原因分析

    程序代码 class Person: #constructor def __init__(self,name,sex): self.Name = name self.Sex = sex def ToS ...

  7. debian apt-get工作的原理

    1 apt-get update apt-get update并没有将远程仓库的包都下载到本地,而是通过访问远程仓库创建或者更新了远程仓库的本地索引,索引文件放在/var/lib/apt/lists目 ...

  8. jQuery.ajaxSetup()

    jQuery.ajaxSetup()函数用于设置AJAX的全局默认设置. 该函数用于更改jQuery中AJAX请求的默认设置选项.之后执行的所有AJAX请求,如果对应的选项参数没有设置,将使用更改后的 ...

  9. redis13-----配置文件

    ==配置文件全解=== ==基本配置 daemonize no 是否以后台进程启动 databases 创建database的数量(默认选中的是database ) #刷新快照到硬盘中,必须满足两者要 ...

  10. spring cloud 服务消费

    Ribbon Ribbon可以在通过客户端中配置的ribbonServerList服务端列表去轮询访问以达到均衡负载的作用. 当Ribbon与Eureka联合使用时,ribbonServerList会 ...