git中cherry-pick命令的使用教程

git cherry-pick可以选择某一个分支中的一个或几个commit(s)来进行操作。例如,假设我们有个稳定版本的分支,叫v2.0,另外还有个开发版本的分支v3.0,我们不能直接把两个分支合并,这样会导致稳定版本混乱,但是又想增加一个v3.0中的功能到v2.0中,这里就可以使用cherry-pick了,其实也就是对已经存在的commit 进行再次提交。

简单用法:

git cherry-pick <commit id>

例如:

$ git checkout v2.0分支
$ git cherry-pick 38361a55 # 这个 38361a55 号码,位于v3.0分支中:

$ git log
commit 38361a55138140827b31b72f8bbfd88b3705d77a
Author: Justin Justin@xxx.com
Date: Sat Dec 10 00:11:44 2016 +0800

1. 如果顺利,就会正常提交。结果:

Finished one cherry-pick.
On branch v2.0分支
Your branch is ahead of 'origin/old_cc' by 3 commits.

2. 如果在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 15a2b6c61927e5aed6111de89ad9dafba939a90b

或者:

error: could not apply 0549563... dev
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' or 'git rm <paths>'
hint: and commit the result with 'git commit'

就跟普通的冲突一样,手工解决:

2.1 $ git status # 看哪些文件出现冲突

both modified: app/models/MainActivity.java

2.2 $ vim app/models/MainActivity.java # 手动解决它。

2.3 $ git add app/models/MainActivity.java

2.4 git commit -c <新的commit号码>

2.5 再次cherry-pick剩余commit

若提示:

error: a cherry-pick or revert is already in progress
hint: try "git cherry-pick (--continue | --quit | --abort)"
fatal: cherry-pick failed

则执行对应操作:

git cherry-pick --continue
git cherry-pick --quit
git cherry-pick --abort

命令集合:

git cherry-pick <commit id>:单独合并一个提交
git cherry-pick -x <commit id>:同上,不同点:保留原提交者信息。
Git从1.7.2版本开始支持批量cherry-pick,就是一次可以cherry-pick一个区间的commit。
git cherry-pick <start-commit-id>..<end-commit-id>
git cherry-pick <start-commit-id>^..<end-commit-id>

前者表示把<start-commit-id>到<end-commit-id>之间(左开右闭,不包含start-commit-id)的提交cherry-pick到当前分支;
后者有"^"标志的表示把<start-commit-id>到<end-commit-id>之间(闭区间,包含start-commit-id)的提交cherry-pick到当前分支。
其中,<start-commit-id>到<end-commit-id>只需要commit-id的前6位即可,并且<start-commit-id>在时间上必须早于<end-commit-id>
注:以上合并,需要手动push代码。

以上内容总结如下:

1.git checkout master            //此操作需要切换到master分支  

2.git pull

3.git cherry-pick  xxxxxx

4.git status 

5.编译提交等

到此这篇关于git中cherry-pick命令的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • git 一个可以提高开发效率的命令:cherry-pick详解

    各位码农朋友们一定有碰到过这样的情况:在develop分支上辛辛苦苦撸了一通代码后开发出功能模块A,B,C,这时老板过来说,年青人,我们现在先上线功能模块A,B.你一定心里一万只草泥马奔腾而过,但为了混口饭吃必须得按老板的意思办事啊. 怎么办?一个办法就是,重新建一个分支,然后再把功能模块C回退,留下功能模块A,B.这种做法不是不行,但是有更好的办法,那就是git所提供的cherry-pick功能. cherry-pick类似于一个定制化的merge,它可以把其它分支上的commit一个个摘下来

  • gitee命令行上传项目的步骤详解

    1.注册gitee账户 2.登录gitee新建个仓库,用来存放项目 3.找到需要上传的项目,右键,git bash here 这里需要先去官网下载安装git git官网 4.git init命令在当前文件夹下创建一个本地仓库 5.git remote add origin 远程仓库地址 6.对需要上传的项目添加追踪,git add .代表当前文件夹下的所有文件都添加追踪 git add "项目名" 单独给某个项目添加追踪 7.先提交到本地仓库 git commit -m "提

  • 详解Git 的 rebase 命令使用方法

    在基于 Git 的开发过程中,我们很容易遇到合并代码的情况,例如我们从 master 分支拉取了一个 feature 分支,当我们开发到一段时间之后,可能需要将 master 的代码合并到我们当前的 feature 分支之中. 这时,我们有两个选择,一个是使用git merge命令,一个是使用git rebase命令,这两个命令都是用来合并代码的,但却有一些差异.在本文中,我们主要讲述git rebase命令的使用方法,也会简单介绍这两个命令的差异. 如上图所示,我们从 master 分支拉取了

  • git blame命令详解

    git blame用来追溯一个指定文件的历史修改记录.它能显示任何文件中每行最后一次修改的提交记录. 所以,如果你在代码中看到一个有 bug 的方法,你可以使用 git blame 标注这个文件,查看哪一次提交引入了这行. 用法: git blame filename 可以使用 -L 指定文件的行数范围: git blame -L n1,n2 filename 例如: 第一列是commit id:接下来是提交人.提交时间.注意一下 ^1da177e4c3f4 这个提交的几行,其中的前缀 ^ 指出

  • Git常用命令介绍

    常用 Git 命令清单.几个专用名词的译名如下. Workspace:工作区 Index / Stage:暂存区 Repository:仓库区(或本地仓库) Remote:远程仓库 一.新建代码库 # 在当前目录新建一个Git代码库 $ git init 新建一个目录,将其初始化为Git代码库 $ git init [project-name] 下载一个项目和它的整个代码历史 $ git clone [url] 二.配置 Git的设置文件为.gitconfig,它可以在用户主目录下(全局配置),

  • Git常用命令汇总

    1.配置自己的用户名和邮箱 git config --global user.name "用户名" //加引号 git config --global user.email "邮箱地址" //加引号 2.生成并部署SSH key公钥 ssh-keygen -t rsa -C "邮箱地址" //加引号 3.查看SSH KEY cat ~/.ssh/id_rsa.pub 4.初始化本地仓库 git init 5.连接远程 git remote add

  • Git命令之分支详解

    1.1 概述 在 Git 中提交时,会保存一个 commit 对象,该对象包含一个指向暂存内容快照的指针,包含本次提交的作者等相关的附属信息,包含零个或者多个指向该提交对象的父对象指针:首次提交时没有直接祖先的,普通提交有一个祖先,由两个或者多个分支合并产生的提交则有多个祖先. 1.1.1 示例 在工作目录中有三个文件,准备将他们暂存后提交.暂存操作会对每一个文件计算校验和(SHA-1哈希串),然后把当前版本的文件快照保存在 Git 仓库中(Git使用blob类型的对象存储这些快照), 并将校验

  • 使用git命令上传代码

    利用git将本地代码提交到远程服务器一般分为如下5个步骤: 一.查看当前文件的状态 使用git status命令可以查看有那些文件进行了修改,一般有下面几个状态: 1.Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged. 2.Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 3.deleted: 文件已删除,本地删除,服务器上还没有删除. 示例如下: 打开git bash客户端,然后输入g

  • git中cherry-pick命令的使用教程

    git cherry-pick可以选择某一个分支中的一个或几个commit(s)来进行操作.例如,假设我们有个稳定版本的分支,叫v2.0,另外还有个开发版本的分支v3.0,我们不能直接把两个分支合并,这样会导致稳定版本混乱,但是又想增加一个v3.0中的功能到v2.0中,这里就可以使用cherry-pick了,其实也就是对已经存在的commit 进行再次提交. 简单用法: git cherry-pick <commit id> 例如: $ git checkout v2.0分支 $ git ch

  • Git中tag标签的使用教程

    目录 一.tag简介 二.tag使用命令 1.列出所有tag 2.查看tag信息 3.创建tag 4.创建带注释tag 5.推送tag 6.特定commit_id创建tag 7.删除tag 8.检出tag 9.切换tag 10.为之前提交的添加tag 11.重命名tag 一.tag简介 tag是git版本库的一个标记,指向某个commit的指针.tag主要用于发布版本的管理,一个版本发布之后,我们可以为git打上 v.1.0.1 ,v.1.0.2 …这样的标签.tag感觉跟branch有点相似,

  • Git中需要熟记的命令小结

    提交流程相关 查看文件改动以及新增的文件 git status 添加新增文件 git add your_file_path // 添加全部文件 git add * // 添加某类型文件 git add dir/*.js 简单的提交文件 git commit -m "Commit message" 提交你所有的修改文件以及添加的文件 git commit -am 'your message' 撤销修改某个文件 git checkout -- <filename> 放弃本地所有

  • Git中bundle命令的使用详解

    目录 1. 打包 2. 验证 3. 查看分支 4. 导入bundle 4.1. 没有gitlab服务器 4.2. 有gitlab服务器 4.2.1 从bundle中clone 4.2.2 从bundle中fetch 1. 打包 用git bundle create命令来打包 # dev指具体的分支名称,repo指项目代码仓库的名称 # 产生的repo.bundle 包含了所有重建该仓库 dev分支所需的数据 git bundle create repo.bundle HEAD dev 2. 验证

  • GIT相关-IDEA/ECLIPSE工具配置的教程详解

    GIT安装 访问: https://git-scm.com/downloads ,进入git'下载页面,根据个人操作系统下载对应软件版本,默认下载最新版: 双击安装即可.选择安装目录和安装内容,如果只是单纯的使用,默认即可. 安装TortoiseGit 安装前,确认Git已安装好,否则TortoiseGit是装不上的. 访问 : https://tortoisegit.org/download/,选择对应的操作系统位数软件下载, 双击软件,点击next,默认安装即可 生成秘钥 开始菜单找到git

  • git用户自定义变量查看修改及调用教程详解

    目录 1.变量定义 2.变量调用 3.变量的修改 4.查看变量 (1)-u选项说明: (2)-x选项说明: (3)set命令说明: 小结: 5.变量删除 1.变量定义 变量正确定义. 格式:变量名="变量值" # 两种方式都可以 [root@localhost ~]# name=zhenniubi [root@localhost ~]# name="zhen niubi" 变量名不能用数字开头. [root@localhost ~]# 2name="zhe

  • mac 中docker安装mysql的图文教程

    今天在Docker中安装了MySQL ,是自己打的docker包. 首先新建Dockerfile 内容如下: FROM mysql:latest MAINTAINER abel.yang <527515025@qq.com> LABEL Descripttion="This image is build for MAC to use mysql" Vendor="GitHub" Version="latest" RUN apt-get

  • NodeJS中的MongoDB快速入门详细教程

    MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. 一.MongoDB必须理解的概念 1.数据库:每个数据库都有自己的权限和集合. 2.文档:一个键值对. 3.集合:一组文档,即一组键值对.当第一个文档插入时,集合就会被创建. 二.Mac下的MongoDB安装和启动 1.使用brew进行安装:brew ins

  • CentOS 6.5中SSH免密码登录配置教程

    0.说明 这里为了方便说明问题,假设有A和B两台安装了centos6.5的主机.目标是实现A.B两台主机分别能够通过ssh免密码登录到对方主机.不同主机的配置过程一样,这里介绍A主机的配置过程. 事先在AB主机分别创建好要免密码登录的用户名,在/etc/hosts文件增加主机名和ip. 创建新用户:useradd linuxidc 设置密码:passwd linuxidc,输入自己想要的密码即可,之后su linuxidc切换用户 修改主机名:vim /etc/sysconfig/network

  • 在windows中追加/删除虚拟打印机实例教程

    由于项目需要在windwos系统中添加多台虚拟打印机(能够正常打印出纸),查找了一下系统函数. 使用 rundll32 printui.dll,PrintUIEntry,在CMD中运行,在弹出框中得到以下提示. 用法: rundll32 printui.dll,PrintUIEntry [options] [@commandfile] /a[file] 二进制文件名 /b[name] 基本打印机名 /c[name] 如果操作在远程机器上,unc 机器名 /dl 删除本地打印机 /dn 删除网络打

随机推荐