git - 查找将被 git cherry 更改的文件

标签 git git-cherry

根据其手册页,git cherry 进行了一些测试以确定是否应将提交挑选到另一个分支中:

The equivalence test is based on the diff, after removing whitespace
and line numbers. git-cherry therefore detects when commits have been
"copied" by means of git-cherry-pick(1), git-am(1) or git-rebase(1).

我想创建一个脚本,通过删除所有只会更改某个文件的提交来进一步减少精选候选列表。

例如如果将更改了文件 A、B、C 的提交 1 cherry picking 到我的分支中只会更改文件 A,而 B 和 C 已经包含更改,我希望脚本从候选列表中删除提交。

换句话说,如果我按照 git cherry 的建议挑选了一个提交,并且生成的提交将只更改文件 A,而没有其他文件,我想删除它从我的列表中。

有没有一种简单的方法可以从 Git 中获取这些信息?

最佳答案

further minimize the list of cherry-pick candidates by removing all commits that would change only a certain file

你可以使用 git diff-tree -p $commit | git apply --exclude=path/to/that/file --numstat,如果列出任何更改,则提交在其他文件中有更改,但不清楚这里的“将更改”是什么意思。 “会改变”,如果您再次选择它而不管它在该文件之外的更改是否已经应用?

做到这一点的唯一方法是对实际应用进行测试运行。您可以自动执行该检查,但您会在这里留下很多 Unresolved 问题。 git diff-tree -p $commit | git apply --exclude=path/to/that/file -3,然后 git diff --name-only 查看是否有任何未决的更改,然后 git reset - -hard 在做或不做整个 cherry-pick 之前。

但是,如果后续工作恢复或修改了它,则挑选一个提交可能会更改当前的上游提示,无论它是否已经被挑选过。因此,如果您不关心您是否正在重新应用随后恢复的更改,那么您为什么要从 git cherry 列表开始呢?这里有些东西没有意义。

关于git - 查找将被 git cherry 更改的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70086306/

相关文章:

git - 单个缺失提交的 git-cherry 等效项是什么?

git - 如何使用 gitcherry 获取提交者电子邮件?

git revert merge 当 merge 回删除文件时

git - Jenkins Git 参数插件无法获取标签

php - PHP 隔离测试环境

svn - GitHub的颠覆版本?

git - 'cherry' 在 git-cherry 中意味着什么?

git - 精心挑选的提交具有不同的哈希值

git - 使用 DVCS merge 中间分支中的更改