git cherry-pick 没有merge的代码到本地

 场景:程序员A提交了一个commit到gerrit上,我们叫他为commit_id1,但是还没有review,那就是没有入库,程序员B想再本地拿到这个commitd_id1,既然这个提交没有入库,很明显,B单纯执行git pull是拿不到这个提交的,那他要怎么办呢,

  目前我想到的有几种方式:第一种如果只是单纯了改了很少量的文件,我们不排斥程序员A把这几个文件直接发给B。如果改动比较大呢?第二种,程序员A本地关于这个提交生成一个patch,发给B,B再在本地把这个patch打上,这是个不错的方式。还有一种,完全不需要额外的动作,只要使用git cherry-pick就可以了。

  但是,B在本地执行了git cherry-pick commit_id1,接着报错 fatal: bad object  commit_id1了!!! 那是因为git cherry-pick是本地特性,本地要有这个commit才可以被git cherry-pick。但是他本地并没有这个commit id,所以出现了这个错

    既然用了gerrit,那么就用gerrit提供的cherry-pick就好了,如下:

1、登陆gerrit页面,找到A提交的commit_id1,点击右上角的‘download’,然后复制cherry-pick那条,如下:

2、然后再本地执行刚才复制的命令,执行,如下:

 

如果跟B本地的文件有冲突,会显示error,然后执行git status 可以看到‘both modify’的字样,告诉你了冲突文件,修改冲突文件即可。或者,将B本地的代码reset到A的commit_id1的Parent(s)的commit(已经merge),然后再cherry-pick。

如果没有冲突,命令执行完,B本地执行git log 就可以看到A的commit_id1的提交了。

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
您好!对于您的问题,`git cherry-pick` 是一个 Git 命令,用于选择并应用一个或多个提交(commit)到当前分支。当您想要将某个分支上的单个提交合并到当前分支时,可以使用 `git cherry-pick`。 如果您想要将一个合并请求(Merge Request)中的提交应用到当前分支上,可以按照以下步骤操作: 1. 确保您已经克隆了包含合并请求的仓库,并且已经切换到要应用更改的目标分支。 ``` git clone <repository_url> cd <repository_directory> git checkout <target_branch> ``` 2. 打开合并请求页面,找到要应用的提交(commit)的哈希值(SHA)或者短哈希值。 3. 在终端中运行 `git cherry-pick` 命令,将提交应用到当前分支上。将 `<commit_sha>` 替换为要应用的提交的哈希值。 ``` git cherry-pick <commit_sha> ``` 如果您要应用多个提交,可以在 `git cherry-pick` 命令后面添加多个提交的哈希值,以便按顺序应用它们。 4. Git 将会尝试将选定的提交应用到当前分支上。如果存在冲突,您需要手动解决冲突。完成冲突解决后,可以使用 `git cherry-pick --continue` 命令继续应用余下的提交。 5. 重复上述步骤,直到您应用了合并请求中的所有提交。 请注意,`git cherry-pick` 可能会导致提交的 SHA 发生变化,因为每个提交的哈希值是根据其内容计算的。 希望这些信息对您有所帮助!如果您有任何其他问题,请随时提问。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值