标签: git-cherry-pick

gitcherrypick 不起作用

我收到一个奇怪的错误:

git cherry-pick a0cd8fe

fatal: bad revision 'a0cd8fe'

这是为什么?

请注意,合并到的分支a0cd8fe已被删除。这就是我收到此错误的原因吗?

git git-cherry-pick

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

结账和挑选樱桃有什么区别?

我从远程存储库中获取了一个特定的错误修复。现在我有两个选择:

  1. git checkout FETCH_HEAD
  2. git cherry-pick FETCH_HEAD

我不确定这两种情况下发生了什么。我已经尝试了第一个版本,在我看来,通过这种方式,我将远程存储库中的更改放入了本地存储库,但我的本地更改似乎丢失了(我在代码中没有看到它们)。但是,第二个选项似乎可以满足我的需要(我在代码中看到了我的更改和来自远程存储库的更改)。

虽然看起来我得到了我需要的东西,但我仍然想更好地了解这两种情况下会发生什么。

我看过这个问题和答案,但我不明白答案,因为我不知道以下短语是什么意思:

  1. “工作目录反映X”
  2. “X 取 Y”

git git-fetch git-cherry-pick

4
推荐指数
1
解决办法
6864
查看次数

gitcherry-pick 内置选项以保留原始提交者和作者

gitcherry-pick 中是否有内置选项来保留原始作者和提交者?不使用脚本,在挑选多个提交时尤其需要。

我找到了这个脚本这个 ,但都已经超过 2 岁了

查看官方文档 ,我没有看到任何选项,我错过了什么吗?

git git-cherry-pick

4
推荐指数
1
解决办法
8883
查看次数

Git 精选范围

我如何挑选 commitC4C5

\n\n

Git树

\n\n

我\xe2\x80\x99已经尝试过git cherry-pick C4..C5,但我只得到C4. \n我想我不\xe2\x80\x99真正理解这个范围的事情是如何工作的。

\n

git git-cherry-pick

3
推荐指数
1
解决办法
1418
查看次数

Cherry-pick和patch apply有什么区别?

我知道git cherry-pick和git apply终端系统。但是今天我遇到了一些问题。我通过使用两个修订版的差异来应用一个补丁。我使用以下命令:

git diff HEAD> diff.patch

git apply diff.patch

我的补丁申请失败了一个文件。

然后,我只是想尝试挑选 commit-id2。它被成功挑选。

可能是什么原因?任何人都想对同一事物有所了解。

git git-cherry-pick

3
推荐指数
1
解决办法
2931
查看次数

Git:如何在没有以前所有历史记录的情况下挑选提交

我想从我的currentrepo 中的特定提交添加一些特定的更改到我的upstreamrepo。

运行这样的东西: git push upstream <commit SHA>:<remotebranchname>

添加提交加上所有以前的更改

运行类似

git checkout -b new-branch 
git pull <remote> <upstream branch> branch is
git cherry-pick <commit hash>
git push <remote> new-branch
Run Code Online (Sandbox Code Playgroud)

还写入所有以前的更改。

我只想将该提交的特定更改写入upstreamrepo,因此它不包括我的currentrepo 中先前提交所做的更改,这些更改不在upstream.

有很多关于在计算器上的信息的cherry-pickrebase,但没有回答这个非常具体的问题。

git git-rebase git-commit git-cherry-pick

3
推荐指数
1
解决办法
652
查看次数

如何从分叉的存储库中仅针对某些文件创建 PR,但对它们进行所有提交?

太长了;博士

\n
    \n
  • 我已经分叉了一个存储库,并对许多文件进行了多次提交,所有这些都在主分支上。
  • \n
  • 现在我想为所选文件的所有提交创建拉取请求,以发送回原始存储库的作者。例如,我想发回一些改进,但不发回我添加的文件。
  • \n
  • 我不在乎所有的提交是否都会被压缩成一个全新的提交。
  • \n
\n

我尝试过的...

\n

我职业生涯的大部分时间都在使用 Perforce,并且仍在习惯 git,所以我想我要么没有意识到我的场景与以下帖子中的场景不匹配,要么我错过了一些隐式步骤对于普通 git 用户来说是显而易见的,但对我来说却不是。

\n\n

我所看到的...

\n

似乎每当我精挑细选时,我最终都会得到一个没有任何更改的分支(不过这是有道理的,因为它们已经致力于掌握,对吗?\xe2\x80\x94那么我如何创建这个“主题分支”我看到有人提到了?)现在我运行了几个我不完全理解的命令(例如git remote add ...),并且还可能将原作者的存储库与我的分叉存储库互换,所以它变得很难说是否因为我弄乱了我的环境而无法正常工作。

\n

打扫干净

\n

@Omer 的回答效果很好。然后我做了一个

\n
git reset --hard HEAD\n
Run Code Online (Sandbox Code Playgroud)\n

清理。原作者合并了 PR,我同步到它:

\n
git remote add upstream git://github.com/<author>/<repo>.git\ngit pull upstream master\n
Run Code Online (Sandbox Code Playgroud)\n

git pull-request git-cherry-pick git-fork

3
推荐指数
1
解决办法
761
查看次数

使用 git rebase Interactive 来编排一系列 gitcherry-pick?

gitcherry-pick 允许简单地通过指示哪个合并父级应该用作基线来选择简单的合并。例如:

git cherry-pick -m 1 1234abcdef
Run Code Online (Sandbox Code Playgroud)

我有一堆提交想要挑选,其中一些可能是合并,而其他则不会。我希望能够使用 git rebase 来挑选所有这些提交,如下所示:

git rebase -i --onto myBranch myBranch 
Run Code Online (Sandbox Code Playgroud)

并将选择列表放入交互式文件中:

p 1234
p 3224
... a bunch more picks
p abcde
Run Code Online (Sandbox Code Playgroud)

而且,如果 git rebase 在这些提交中遇到合并,我想指定相当于cherry-pick 的-m 1选项,以指示应针对第一个父级选择更改。

我尝试了一些与合并相关的选项来变基,但最终总是收到错误:

commit 3c4ffe04532 is a merge but no -m option was given.
Run Code Online (Sandbox Code Playgroud)

(即使我指定 -m 来变基。)

我意识到我可以使用cherry-pick 编写一个脚本,但我喜欢现有的行为rebase -i(它运行在命令列表中,如果遇到无法处理的情况则暂停)。我非常想直接利用该逻辑,但我一直无法找到正确的方法来巧妙地使用 rebasepick命令来填补这一空白。

有没有办法让 rebase 采用cherry-pick 的-m #行为pick

为了以另一种方式陈述我的目标并帮助澄清问题 - 我想使用 git-rebase 的--i功能来协调一系列git cherry-picks,以便可以手动解决流程中的任何合并冲突,然后可以使用--continue …

git git-rebase git-cherry-pick

3
推荐指数
1
解决办法
1890
查看次数

当重命名文件很常见时,替代git cherry-pick

我想挑选从分支到另一个分支的单一提交.我希望文件重命名很常见,但仍希望能够在没有人为干预的情况下应用更改.

由于内置的​​cherry-pick命令没有接缝来检测重命名(至少在我的测试用例中),特别是与修改重命名的文件结合使用时.

我尝试了一下,最后想出了一个涉及两个rebase操作的解决方案.

让我们假设我有一个名为target的分支指向我想要应用cherry-pick的提交.我想要挑选的提交由名为source的分支指向.

然后我执行以下命令:

  1. create branch sourceTemp指向与源相同的提交(因为我想保留分支源)
  2. git rebase --strategy="recursive" --strategy-option="rename-threshold=30" target sourceTemp (可能使用另一个阈值;测试文件非常小,因此更改相对较大)
  3. git rebase --onto target sourceTemp~ sourceTemp

这仅适用于分支源中最后一次提交引用到目标的更改.

我也把测试放在github上:

https://github.com/fraschfn/cherry-pick

我想知道的是,如果这种方法是可行的,或者只是在我简单的测试设置中有效的话!

更新:替代方法

我将补丁重新绑定到目标的合并基础:

开始的情况

    A - B     <--- target
   /
  M 
   \
    C - D     <--- source
Run Code Online (Sandbox Code Playgroud)

我想樱桃挑选D到B.

  1. 创建新的分支补丁后,将D重新映射到M上

      A - B     <--- target
     /
    M - D'      <--- patch
     \
      C - D     <--- source
    
    Run Code Online (Sandbox Code Playgroud)
  2. 合并C和D'以获取源代码

    合并B和D'以获取目标的修补版本

       A - B …
    Run Code Online (Sandbox Code Playgroud)

git renaming git-rebase cherry-pick git-cherry-pick

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

从没有叉分支的闭合拉请求樱桃采摘

我有一个包含两个提交的pull请求,其中一个我愿意合并.

但是,pull请求已经关闭(未合并),并且从fork repo中删除了相应的分支.

有没有办法挑选那个提交?或者更一般地说,有没有办法合并一个关闭拉取请求而无法访问fork分支?

git github cherry-pick pull-request git-cherry-pick

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