根据其手册页,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/