标签: git-cherry-pick

如何git cherrypick在特定分支中引入的所有更改

背景资料:

由于现有系统的工作流程受到限制,我们需要建立一个有点非正统的git过程.

(patch)    A-B---F
             |   |
(hotfix)     C-D-E
                 |
(dev)      1-2-3-G
Run Code Online (Sandbox Code Playgroud)

在补丁分支上,有一些提交.这里的文件与dev上的文件类似但不完全相同(同步脚本按照许多文件中的设置顺序切换,使它们在功能上相同时显示为已更改).

此分支需要修复,以便创建并处理修补程序分支.然后,这个分支合并回补丁,到目前为止,非常好.

需要将相同的修补程序部署到dev分支,以使其与修补程序保持相对同步,但尝试合并修补程序分支会导致git尝试合并来自A和B的所有不相关和"未更改"的文件,而不是只有C,D和E.

题:

看起来,cherry-pick做了我们想要的只是从选择的提交中获得更改,但我真的想要一种方法来同时挑选给定分支中的所有提交,而不必每次都查找提交ID .

git merge git-cherry-pick

23
推荐指数
4
解决办法
2万
查看次数

樱桃采摘合并提交时的主线父母号码

假设这是我的git历史

  Z
 /
A -- C -- D
 \  /      
  B

我的HEAD目前在Z.我想樱桃挑选BC.如果我的理解是正确的,我应该这样做:

git cherry-pick B
git cherry-pick C -m 1
git commit --allow-empty
Run Code Online (Sandbox Code Playgroud)

它在我的情况下工作,因为C是一个无操作(因此之后的空提交,我需要提交其他原因),但我想知道后面的参数是什么-m.以下是我从文档中读到的内容:

-m父号

- 主线父母号码

通常你不能挑选合并因为你不知道合并的哪一边应该被认为是主线.此选项指定主线的父编号(从1开始),并允许cherry-pick重放相对于指定父级的更改.

在我的情况下,C有两个父母,但我怎么知道哪一个是1和2,更重要的是当我选择1或2时什么时候重要?

git cherry-pick git-cherry-pick

22
推荐指数
1
解决办法
2万
查看次数

为什么git log --cherry-pick没有删除等效的提交?

我一直在尝试使用

git log --no-merges --cherry-pick --right-only master...my-branch
Run Code Online (Sandbox Code Playgroud)

生成my-branch中但不在master中的提交列表(根据git-log文档).但是,列表中仍有许多等效的提交.如果我显示它们和它们的补丁,除了commit id之外没有区别.

git show 16cbd0e47406a4f7acbd6dc13f02d74d0b6a7621 >patcha
git show c53c7c32dcd84bfa7096a50b27738458e84536d5 >patchb

diff patcha patchb
1c1
< commit 16cbd0e47406a4f7acbd6dc13f02d74d0b6a7621
---
> commit c53c7c32dcd84bfa7096a50b27738458e84536d5
Run Code Online (Sandbox Code Playgroud)

甚至将git patch-id它们视为等效:

git show c53c7c32dcd84bfa7096a50b27738458e84536d5 | git patch-id
2b5504fb9a8622b4326195d88c7a20f29701e62b c53c7c32dcd84bfa7096a50b27738458e84536d5
git show 16cbd0e47406a4f7acbd6dc13f02d74d0b6a7621 | git patch-id
2b5504fb9a8622b4326195d88c7a20f29701e62b 16cbd0e47406a4f7acbd6dc13f02d74d0b6a7621
Run Code Online (Sandbox Code Playgroud)

怎么不git log --cherry-pick把这些作为重复?

git cherry-pick git-log git-cherry-pick

21
推荐指数
1
解决办法
6194
查看次数

如何在SourceTree中执行git cherry-pick --continue?

在我解决了混乱之后,如何使用SourceTree继续采摘樱桃.如果我正在进行rebase并且我遇到冲突,那么当我点击提交后解析它们时,SourceTree让我继续该rebase.但如何继续樱桃采摘操作?

git git-cherry-pick atlassian-sourcetree

16
推荐指数
2
解决办法
3万
查看次数

为什么这个樱桃挑选有冲突?

我知道这git cherry-pick是一个用于应用指定提交更改的命令,但我认为我并不真正理解它的工作方式.

让我们说一个像这样的回购行为:

git init

echo a>a
git add .; git commit -am 'master add line a'

git checkout -b dev
echo b>>a
git commit -am 'dev add line b'
echo c>>a
git commit -am 'dev add line c'

git checkout master

git cherry-pick dev
Run Code Online (Sandbox Code Playgroud)

我认为cherry-pick命令会运行良好并将文件更改a为:

a

c
Run Code Online (Sandbox Code Playgroud)

但实际上我得到了以下信息:

error: could not apply 08e8d3e... dev add line c
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' or 'git …
Run Code Online (Sandbox Code Playgroud)

git cherry-pick git-cherry-pick

16
推荐指数
1
解决办法
4557
查看次数

错误:在发送时,addinfo_cache失败了

我正在接受跟随错误,而樱桃采摘一个gerrit ...有没有人知道这意味着什么,为什么有人会看到它?

error: addinfo_cache failed for path 'ROE/NAS/src/abc.c
Run Code Online (Sandbox Code Playgroud)

cherry-pick gerrit git-cherry-pick

15
推荐指数
1
解决办法
6509
查看次数

如何确定Git中的樱桃选择器的提交者?

在Git中,cherry-pick至少在没有冲突时保留原始提交的作者,时间戳等.但有没有办法确定哪些用户执行了将该提交带到新分支的樱桃选择?

git merge cherry-pick git-cherry-pick

12
推荐指数
2
解决办法
4874
查看次数

为什么git在两个明显相同的添加文件之间显示冲突?

我有一个在TFS中启动的项目,然后转移到Git.不幸的是,将它移动到Git的人只是检查当前文件而不是使用git-tfs.我试图在我使用git-tfs从TFS中提取的提交之后,在Git中重新设置他的新提交.

要做到这一点,我只是简单地在git-tfs提交之上重新提交他的提交.(我意识到这会弄乱远程Git分支机构,但我们是一个小团队,它会没事.我也尝试过挑选樱桃,但我遇到了同样的问题.)

我遇到的问题是一组看起来像这样的冲突:

<<<<<<< HEAD
namespace OurNiftyProject
{
    public enum CardType
    { 
        Visa = 0,
        MasterCard = 1
    }
}
||||||| merged common ancestors
=======
namespace OurNiftyProject
{
    public enum CardType
    { 
        Visa = 0,
        MasterCard = 1
    }
}
>>>>>>> Add a bunch of stuff.
Run Code Online (Sandbox Code Playgroud)

看来这是添加这些文件的TFS端提交和添加它们的Git端提交之间的冲突(因为Git repo开始为空).

逻辑上可能是跳过这个提交,但也有一些文件(比如几百个中的十个)是新的.当然,那些不会引起冲突.

为什么Git不能自己弄清楚两个文件是否相同?即使我在使用--ignore-whitespacerebase时使用,Git仍会显示几十个这样看似相同的文件.我对如何解决这个问题感到茫然.

git git-rebase merge-conflict-resolution git-cherry-pick

11
推荐指数
2
解决办法
7316
查看次数

git cherry-pick --continue,' - no-edit'选项?

我正在编写一个用于迁移git repos的脚本.关于樱桃挑选冲突,我跑

git add .
git cherry-pick --continue
Run Code Online (Sandbox Code Playgroud)

这会调出vim,提示我保存提交消息并冻结脚本.我正在寻找一个命令行选项,--no-edit或者--porcelain来解决这个问题.

丑陋的终端黑客也可能受到欢迎;)

git git-cherry-pick

11
推荐指数
1
解决办法
3449
查看次数

在cherry-pick操作上可以执行哪些git hooks?

我正在尝试找到一种方法来在挑选它们时检查提交。不幸的是,我找不到与cherry-pick操作一起使用的 git hook。在精心挑选的提交上执行脚本的可能解决方案是什么?

git cherry-pick git-cherry-pick

10
推荐指数
1
解决办法
1077
查看次数