Git常用命令cherry-pick

这篇具有很好参考价值的文章主要介绍了Git常用命令cherry-pick。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Git常用命令cherry-pick

将指定的提交应用于其他分支,可以用于恢复不小心撤销(revert/reset)的提交。

对于多分支的代码库,将代码从一个分支转移到另一个分支是常见需求。

这时分两种情况。一种情况是,你需要另一个分支的所有代码变动,那么就采用合并 git merge 。另一种情

况是,你只需要部分代码变动(某几个提交),这时可以采用 cherry pick

1、cherry-pick使用

git cherry-pick 命令的参数,不一定是提交的 commit 值,分支名也是可以的,表示转移该分支的最新提交。

# 选择commit,合并进当前分支,会在当前分支产生一个新的提交
# 去合并某分支的某一次提交记录
$ git cherry-pick commit
# 合并分支的某几次提交记录
$ git cherry-pick commit1 commit2 ...
# 合并提交记录commit1到commit2之间的所有的提交记录,但不包含commit1的这次提交记录
$ git cherry-pick commit1..commit2
# 合并提交记录commit1到commit2之间的所有的提交记录,包含commit1的这次提交记录
$ git cherry-pick commit1^..commit2
# 合并该分支上最新的一次提交记录
$ git cherry-pick branch_name

例子:

$ git branch
* branch_a
  master
# branch_a
$ git log --oneline
ddbfc0b (HEAD -> branch_a, origin/branch_a) branch_a | update a.txt | add new.txt
87d5c63 add f.txt
47e8b59 add e.txt
c0547da add d.txt
9c173bb add c.txt
8c4a625 add b.txt
8e58180 add a.txt
# master
git log --oneline
d735ee3 (HEAD -> master, origin/master, origin/branch_d, origin/HEAD) branch_d | update a.txt | update b.txt | update e.txt
8cb57f6 (origin/branch_c) branch_c | update a.txt | delete e.txt
5b05cb6 (origin/branch_b) branch_b | update a.txt | add new.txt
ddbfc0b (origin/branch_a, branch_a) branch_a | update a.txt | add new.txt
87d5c63 add f.txt
47e8b59 add e.txt
c0547da add d.txt
9c173bb add c.txt
8c4a625 add b.txt
8e58180 add a.txt
# 切换到branch_a分支
$ git checkout branch_a
Switched to branch 'branch_a'
Your branch is up-to-date with 'origin/branch_a'.

# cherry-pick commit
$ git cherry-pick 5b05cb6
[branch_a 1b4e841] branch_b | update a.txt | add new.txt
 Date: Sat May 27 13:14:01 2023 +0800
 2 files changed, 2 insertions(+)
 
git log --oneline
1b4e841 (HEAD -> branch_a) branch_b | update a.txt | add new.txt
ddbfc0b (origin/branch_a) branch_a | update a.txt | add new.txt
87d5c63 add f.txt
47e8b59 add e.txt
c0547da add d.txt
9c173bb add c.txt
8c4a625 add b.txt
8e58180 add a.txt

$ cat a.txt
branch_a
branch_b
# git cherry-pick commit范围
$ git cherry-pick 5b05cb6..d735ee3
[branch_a a50b7e5] branch_c | update a.txt | delete e.txt
 Date: Sat May 27 13:31:13 2023 +0800
 2 files changed, 2 insertions(+), 1 deletion(-)
 delete mode 100644 e.txt
[branch_a fb8bbfc] branch_d | update a.txt | update b.txt | update e.txt
 Date: Sat May 27 17:04:00 2023 +0800
 3 files changed, 3 insertions(+), 1 deletion(-)
 delete mode 100644 b.txt
 create mode 100644 e.txt

$ git log --oneline
fb8bbfc (HEAD -> branch_a) branch_d | update a.txt | update b.txt | update e.txt
a50b7e5 branch_c | update a.txt | delete e.txt
1b4e841 branch_b | update a.txt | add new.txt
ddbfc0b (origin/branch_a) branch_a | update a.txt | add new.txt
87d5c63 add f.txt
47e8b59 add e.txt
c0547da add d.txt
9c173bb add c.txt
8c4a625 add b.txt
8e58180 add a.txt

$ cat a.txt
branch_a
branch_b
branch_c
branch_d

2、cherry-pick冲突

再重新执行:

$ git cherry-pick 5b05cb6
error: could not apply 5b05cb6... branch_b | update a.txt | add new.txt
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'

# 查看状态
$ git status
On branch branch_a
Your branch is ahead of 'origin/branch_a' by 3 commits.
  (use "git push" to publish your local commits)

You are currently cherry-picking commit 5b05cb6.
  (fix conflicts and run "git cherry-pick --continue")
  (use "git cherry-pick --abort" to cancel the cherry-pick operation)

Unmerged paths:
  (use "git add <file>..." to mark resolution)

        both modified:   a.txt

no changes added to commit (use "git add" and/or "git commit -a")

# 出现冲突
$ cat a.txt
branch_a
<<<<<<< HEAD
branch_b
branch_c
branch_d
=======
branch_b
>>>>>>> 5b05cb6... branch_b | update a.txt | add new.txt

那么 cherry-pick 时出现冲突该如何解决。

2.1 修复冲突后执行git cherry-pick --continue

# 解决冲突
$ cat a.txt
branch_a
branch_b

$ git cherry-pick --continue
error: Committing is not possible because you have unmerged files.
hint: Fix them up in the work tree, and then use 'git add/rm <file>'
hint: as appropriate to mark resolution and make a commit.
fatal: Exiting because of an unresolved conflict.
U       a.txt

$ git add a.txt

$ git cherry-pick --continue
[branch_a 04d5f2f] branch_b | update a.txt | add new.txt
 Date: Sat May 27 13:14:01 2023 +0800
 1 file changed, 1 insertion(+), 3 deletions(-)
 
$ git log --oneline
04d5f2f (HEAD -> branch_a) branch_b | update a.txt | add new.txt
fb8bbfc branch_d | update a.txt | update b.txt | update e.txt
a50b7e5 branch_c | update a.txt | delete e.txt
1b4e841 branch_b | update a.txt | add new.txt
ddbfc0b (origin/branch_a) branch_a | update a.txt | add new.txt
87d5c63 add f.txt
47e8b59 add e.txt
c0547da add d.txt
9c173bb add c.txt
8c4a625 add b.txt
8e58180 add a.txt

$ cat a.txt
branch_a
branch_b

2.2 放弃cherry-pick执行git cherry-pick --abort

如果不想继续 cherry-pick,那么可以取消 cherry-pick,这个时候可以恢复到 cherry-pick 之前的样子。文章来源地址https://www.toymoban.com/news/detail-620990.html

$ git cherry-pick --abort

$ git status
On branch branch_a
Your branch is ahead of 'origin/branch_a' by 3 commits.
  (use "git push" to publish your local commits)

nothing to commit, working tree clean

$ git log --oneline
fb8bbfc (HEAD -> branch_a) branch_d | update a.txt | update b.txt | update e.txt
a50b7e5 branch_c | update a.txt | delete e.txt
1b4e841 branch_b | update a.txt | add new.txt
ddbfc0b (origin/branch_a) branch_a | update a.txt | add new.txt
87d5c63 add f.txt
47e8b59 add e.txt
c0547da add d.txt
9c173bb add c.txt
8c4a625 add b.txt
8e58180 add a.txt

到了这里,关于Git常用命令cherry-pick的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • git cherry-pick命令(合并单个或多个提交记录到当前分支)

    Git cherr-pick:选择性合并提交 在项目中,我们常常需要选择性的把某个提交或某些提交单独的合并到当前分支,Git 提供了一个称为 cherry-pick 的命令来执行这个操作。 1、要在当前分支上合并某个提交,可以使用以下命令: git cherry-pick commit-hash 其中, 是要合并的提交的哈希值

    2024年02月04日
    浏览(64)
  • git合并代码命令 分支合并代码 cherry-pick merge rebase区别

    1.cherry-pick 需要注意 暂存未提交的更改 暂存更改: 使用git stash或git stash push命令暂存当前工作目录和暂存区的更改。你可以提供一个消息作为参数,以便更容易地识别stash项: 执行cherry-pick: 现在,你的工作目录是干净的,可以安全地执行cherry-pick操作了。找到你想要cherry

    2024年04月12日
    浏览(49)
  • Git Cherry Pick详解

    Git是一款分布式版本控制系统,它提供了许多强大的功能来管理代码的版本和变更。`cherry-pick`是一个非常常用的Git命令,它的功能是将某个分支的某次提交应用到当前分支。这对于将特定的代码改动从一个分支移动到另一个分支非常有用。例如,你可能在开发分支上修复了一

    2024年02月16日
    浏览(46)
  • 【Git】Git cherry-pick

    1.指令效果与基本用法 在 Git 的文档中,对于 cherry-pick 指令的描述如下: git cherry-pick 命令用来获得在单个提交中引入的变更,然后尝试将作为一个新的提交引入到你当前分支上。 从一个分支单独一个或者两个提交而不是合并整个分支的所有变更是非常有用的。 该命令的基本

    2024年02月09日
    浏览(55)
  • git中的cherry-pick和merge有些区别以及cherry-pick怎么用

    git中的cherry-pick和merge在使用场景上有些区别: cherry-pick用于将另一个分支的某一次或几次commit应用到当前分支。它可以选择性地拉取代码修改。 merge用于将两个分支合并成一个新分支。它会把整个分支上的所有修改都合并过来。 具体区别: cherry-pick通常用于将bug修复从发布分支

    2024年02月09日
    浏览(52)
  • Git Cherry-pick使用

    无论项目大小,当你和一群程序员一起工作时,处理多个 Git 分支之间的变更都会变得很困难。有时,与其把整个 Git 分支合并到另一个分支,不如选择并移动几个特定的提交。这个过程被称为 \\\"挑拣\\\", 即 Cherry-pick。 本文将介绍 \\\"Cherry-pick\\\" 的内容、原因和方法。 让我们开始吧

    2024年02月13日
    浏览(53)
  • Git 的 Cherry-Pick

    cherry-pick 是 Git 版本控制工具中的一个命令,和 commit 、pull 一样,它只是一个命令。 cherry-pick 和它的名称一样,精心挑选,挑选一个我们需要的 commit 进行操作。它可以用于将在其他分支上的 commit 修改,移植到当前的分支。 一个很常见的场景,就是想在某个稳定版本上,添

    2024年02月04日
    浏览(45)
  • Git cherry-pick详解

    此文在阅读前需要有一定的git命令基础,若基础尚未掌握,建议先阅读这篇文章Git命令播报详版 对于多分支的代码库,将代码从一个分支引入到另一个分支是常见需求。 这时分两种情况。一种情况是,你需要另一个分支的所有代码变动,那么就采用合并( git merge )。另一种

    2024年02月12日
    浏览(65)
  • git cherry-pick 用法

    说明:本人基于 master 新建分支 master-fxd,那么目标分支为 master-fxd 说明,其他分支例如 dev 提交的代码,使用 jihulab.com 比较 master-fxd 和 dev 分支,下图右侧复制单个提交 id

    2024年02月12日
    浏览(55)
  • 【GIT】cherry-pick 基本使用

    当我们需要在本地合入其他分支的提交时,如果我们不想对整个分支进行合并,而是只想将某一次提交合入到本地当前分支上,这时候就需要用到cherry-pick操作。 git cherry-pick 简单理解为挑选分支的意思,挑选什么分支呢?就是我们在自己的功能分支上每次的commit提交记录(分

    2024年02月08日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包