【问题标题】:How to cherry pick range of commits from specific author?如何挑选特定作者的提交范围?
【发布时间】:2021-07-29 10:36:49
【问题描述】:

例如我有这样的提交:

comit1 user1
comit2 user2
comit3 user3
comit4 user1
comit5 user1
comit6 user2
comit7 user1

我怎样才能只提交来自 user1 的提交?

comit1 user1
comit4 user1
comit5 user1
comit7 user1

如果无法使用cherry-pick,还有其他使用1,2命令的解决方案吗?

【问题讨论】:

  • 有多少提交,有多少来自user1
  • @sk_pleasant-EliasHolzmann 100 多次提交,其中大约 20 次来自 user1
  • 只需两步即可轻松完成:(1) 获取所需提交哈希 ID 的列表(使用您喜欢的任何方法;git loggit rev-list 是显而易见的方法)。 (2) 将此哈希 ID 列表提供给 git cherry-pick,为樱桃挑选选择适当的顺序。
  • @torek 我对 git 不是很熟悉,你能在回答中描述一个细节吗?
  • 查看 sk_pleasant 的回答;请注意,$(...) 是一种 bash 主义。您可以通过安装适用于 Windows 的 Git 来获得适用于 Windows 的 bash 版本。 Bash 是一个命令行解释器,在某些方面与 CMD.EXE 类似,但非常优越(在功能方面更像 PowerShell)。或者,您可以学习和使用 PowerShell,它也可以做这种事情。我不使用 Windows,所以我使用 bash。

标签: git git-cherry-pick


【解决方案1】:

由于user1 的提交只有约 20 次,您可以将 git cherry-pickgit log --author 结合使用:

git cherry-pick $(git log --pretty="%H" --author "user1" commit1~..commit7)

或者,您也可以使用git rev-list 代替git loggit rev-list 相当于 git log --pretty="%H" 如果您只对提交哈希感兴趣,则更短 - 感谢@RomainValeri指出这一点!):

git cherry-pick $(git rev-list --author "user1" commit1~..commit7)

请注意,如果 user1 的提交过多,这失败,因为git cherry-pick 的参数数量(每个提交一个)会导致堆栈溢出。但是,there are workarounds for this

【讨论】:

  • 这会引发致命错误:错误修订版 '$(git', im using windows OS
  • 是的,这只适用于 Linux/Unix shell。我不是 Windows 人,所以我真的帮不上忙。我认为一些 Git 安装程序还包含 bash(Linux 上最流行的 shell),如果是这种情况,您可以在那里运行命令。
  • 优秀的答案。顺便说一句,由于您的子命令列出了哈希,您可能希望使用 rev-list 而不是 log 来获得更简单的 git cherry-pick $(git rev-list --author="user1" commit1~..commit7)
  • @RomainValeri 感谢您对git rev-list 的参考——不知道那个命令!我已将此添加到我的答案中。
  • 你能把$(git分开吗?这应该有效:$( git。写结束时也是一样的)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-12
  • 1970-01-01
  • 2014-07-04
  • 2013-10-14
  • 2021-11-02
相关资源
最近更新 更多