让樱桃挑选不带来历史 [英] Make Cherry Pick not bring in history

查看:106
本文介绍了让樱桃挑选不带来历史的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以我遇到了一个git的问题,当我选择rebase或cherry选择一个特定的提交时,我将获得比该特定提交更多的信息。这个问题在这个问题中很好地概括了:





这一切都很好,我知道它正在酝酿历史,因为我想要的提交取决于那里的历史。我没有得到的是如何解决它。我真的不希望樱桃选择应用所有这些历史,我更愿意用它来利用这段历史找出线路应该去的地方,然后引发冲突,说它必须按顺序做点什么以使其适合。



有没有办法让我这样做?我发现的唯一方法是我可以从该提交中制作一个补丁并应用该补丁,但是我真的希望能够为我的树使用樱桃挑选和重建。

为了说明我的例子,你可以在一个空目录中创建一个git仓库,然后添加一行文本文件到你的仓库。然后在3个独立的提交中添加3行到文件,所以你的文件中将有4个提交和4行。我的档案看起来像:

 第1行
第2行
第3行
第4行

现在执行git checkout HEAD〜3,以便只有

 第1行

然后调用git cherry-挑头,你会得到一个冲突。为什么会发生这种情况在我上面发布的链接中列出。您的文件将如下所示:

  line 1 
<<<<<<<<<<<<<<<<< ; HEAD
=======
line 2
line 3
line 4

>>>>>> > 6fe905b ...提交4

但是这很糟糕,因为如果这真的出现了,合并冲突是说第四次提交的内容比第四次提交的内容要多得多。那么我有什么方法可以解决它吗?这样,挑选合适的内容会给我一个更合理的合并冲突?在我现实世界的问题上,这是即将发生的,当我正在做一个rebase时发生。如果我可以解决这个问题,我的逻辑是这个问题的根本原因应该可以解决rebase。 解决方案

[注:编辑后添加 diff3 ,重新编辑该问题;看最底部的部分]

cherry-pick 命令使用一个列表作为参数提交ID:


git cherry-pick [--edit] [-n] [-m parent-number] [-s] [-x] [--ff]< commit> ...

但是你说你正在使用:

  git cherry-pick分支名称commit-hash 

这意味着你要求git选择两个樱桃:一个与命名分支的尖端相关的樱桃(SHA-1 ID branch-name resolves),以及与给定 commit-hash 关联的那个。



换句话说,先运行它:

  git rev-list --no-步骤分支名称提交哈希

来自 rev-list 是什么 cherry-pick see有效。




git rebase 可以做更多的事情大于 git cherry-pick 。通常情况下,人们通过这种方式将分支机构(这是我刚刚制作的一个术语)从一点移到另一点: C> A - B - C - D - E < - 原产地/主产地
\
K - L < - 本地

当你让一个本地分支做一些工作时(提交 K L on local ),同时别人自己做了工作(提交 D E ),并且您决定要将您的本地分支重新定位在他们的工作之上,所以你可以这样做:

  git fetch 

(然后你看看提交 D E ,所以你想让你的本地 master 最新):

  git checkout master 
git merge --ff-only origin / master

(当地主人现在是最新的,现在你决定改变分支 local ):

  git checkout local 
git rebase master

Rebase基本上是一个自动化的重复樱桃选择直到完成,然后更改分支标签操作。鉴于上面提到的提交图,它首先执行分离 - HEAD git checkout 以提交 E ,那么它会执行 K git cherry-pick ,重复提交 L ,并且(如果一切顺利的话)最后调整本地分支标签 local 指向最后一项新的挑选提交:

[开始]

  A  -  B  -  C  -  D  -  E  -   - 主,原产地/主产地
\
K - L < - HEAD =当地

[step 1,get HEAD 直接设置为 E ,然后选择一个 K 的副本,给出:]

  A  -  B  -  C  -  D  -  E  -   - 主,原产地/主产品
\ \
\ K'< - HEAD [分离]
\
K - L < - 本地



<步骤2,选择 L 的副本,给出:]

  A  -  B  - C-D -E < - 主,原产地/主产地
\ $
\ K'-L'< - 顶头[分离]
\
K - L < - 本地



<使用樱桃挑选顺序,移动标签, ]

  A  -  B  -  C  -  D  -  E < -  master,origin / master 
\ \\ \\
\ K'-L'< - HEAD = local
\
K - L < - [no label,abandoned]

如果需要,重复的樱桃挑选序列将停止(伴随合并冲突),但如果是这样,它会将文件保留在 .git 目录来记住它正在做什么以及它到底有多远,以便您可以运行 git rebase --continue 在你解决问题后。



本质上,两者之间的巨大差异n cherry-pick rebase 为:

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆