【问题标题】:git cherry pick - range of commits and exclude some in betweengit cherry pick - 提交范围并排除其中的一些
【发布时间】:2013-03-19 05:11:12
【问题描述】:

我通常使用以下 git 命令来挑选一系列 gerrits..不,我如何排除介于两者之间的几个 gerrits.. 可以修改以下命令,或者是否有一个我们可以选择一系列 gerrits 并排除的命令我们想要的那些..

git cherrypick fromgerritSHA1..togerritSHA1

【问题讨论】:

标签: git github gerrit repository


【解决方案1】:

您可以指定多个范围:

git cherry-pick A..B C..D E..F

甚至是特定的提交:

git cherry-pick A B C D E F

如果您有很多要排除的提交,那么执行这样的操作可能会更容易(有点像穷人的 git rebase -i for git cherry-pick):

git log --pretty=oneline A..F | tac > tempfile.txt
< edit tempfile.txt to remove the commits you don't want >
git cherry-pick $(awk '{print $1}' tempfile.txt)

编辑:向日志中的tac 添加了建议,因为git cherry-pick 希望以与git log 产生的相反顺序查看提交(也可以使用git log --reverse ...)。

【讨论】:

  • 出于某种原因,我在 tempfile.txt 中得到的行需要颠倒。 git log 将显示从最新到最旧的所有提交,同时使用 git cherry pick 你想从最旧到最新应用这些提交。您是否错过了它,或者这不是您的问题?
  • @KonradSzałwiński 你是对的......忘了那一点。 Linux 有一个名为 tac 的便捷实用程序来反转行的顺序 - 我将在...中编辑它。
  • 感谢您更新解决方案。不幸的是,Windows 没有“tac”命令,所以当时我不得不使用在线工具来反转线条。感谢您使用 git log --reverse 指出这一点。
  • 您是否也知道是否有办法保留我们挑选的提交的原始创建日期?
  • 什么时候必须指定 A^..B 才能包含 A。
【解决方案2】:

如果您在挑选樱桃时遇到如下问题,请尝试选择之前的起始哈希值,而不是原来的尝试。

git cherry-pick a005efa..1ece685
[temp_4454kjerer3233 3520dd4] 3. xxx.
 1 file changed, 9 insertions(+)
[temp_4454kjerer3233 791cec5] 4. xxx.
 3 files changed, 19 insertions(+)
[temp_4454kjerer3233 2e95364] 5. xxx.
 2 files changed, 21 insertions(+)
[temp_4454kjerer3233 59e38b9] 6. xxx.
 3 files changed, 61 insertions(+)
error: could not apply a3b0c6b... 7. xxx.
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'

【讨论】:

    【解决方案3】:

    不确定是否可以将单个提交拉出范围 abcdef..123456。 Git 范围语法在gitrevisions 的文档中进行了解释,但它看起来不像那样工作。不过,还有另一种方法可以仅使用范围哈希和要排除的哈希来获得所需的内容。

    假设您不想要的fromgerritSHA1..togerritSHA1 范围内的两个哈希是skiphash1skiphash2,请尝试:

    $ git rev-list --reverse fromgerritSHA1..togerritSHA1 | grep -vE 'skiphash1|skiphash2' | git cherry-pick --stdin
    

    git rev-list --reverse fromgerritSHA1..togerritSHA1 打印出fromgerritSHA1..togerritSHA1 范围内的提交哈希,一次一行。需要--reverse 才能以正确的顺序列出樱桃挑选的哈希值。

    grep -vE 'skiphash1|skiphash2' 从列表中删除您不想要的两个哈希值。您可以添加更多的哈希值来跳过,只需将它们用| 分隔即可。

    最后,仅将您想要的提交哈希列表传递给git cherry-pick --stdin

    【讨论】:

      猜你喜欢
      • 2012-03-11
      • 2012-05-21
      • 2018-04-17
      • 2016-01-08
      • 2012-11-05
      • 2021-01-18
      • 2017-05-31
      • 1970-01-01
      • 2016-10-24
      相关资源
      最近更新 更多