在Git中检查多个同名文件

3

我在一个包含多个eclipse项目的大型项目中合并了几个其他分支,结果导致一堆org.eclipse.jdt.core.prefs设置被更改了,我想在我的分支上恢复这些设置。是否有魔法命令可以在我的git回购中“重置”这些文件,覆盖所有的eclipse项目?

我尝试了以下操作:

git checkout origin/BRANCH_WITH_CORRECT_FILES -- *org.eclipse.jdt.core.prefs

这将返回

error: pathspec '*org.eclipse.jdt.core.prefs' did not match any file(s) known to git.

这是因为 * 吗?我该如何避免它?


你尝试过使用两个星号吗?像这样:git checkout origin/BRANCH_WITH_CORRECT_FILES -- *org.eclipse.jdt.core.prefs* - Sascha Wolf
如果我尝试使用两个星号,我会遇到相同的问题。 - kinbiko
1个回答

5
问题出在 git checkout 不会在子目录中搜索。如果要使用星号检出文件,您必须指定 git 可以找到它们的文件夹。
尽管如此,我们仍然可以检出所有包含特定字符串名称的文件,无论它们在存储库中的位置如何。要实现这一点,我们需要组合多个命令。
git ls-tree -r --name-only <branch> | grep <pattern>

这将返回所有文件名中包含给定模式的列表;我们将此命令的输出传递给git checkout,它将相应地更新工作树。
git checkout <branch> -- $(git ls-tree -r --name-only <branch> | grep <pattern>)

魔法已经完成。


为了更方便的使用,我建议在全局的gitconfig中创建一个别名。

git config --global alias.super-checkout '!f() { git checkout $1 -- $(git ls-tree -r --name-only $1 | grep "$2"); }; f'

接下来,您可以使用命令 git super-checkout <branch> <pattern>,或者在您的情况下:

git super-checkout origin/BRANCH_WITH_CORRECT_FILES org.eclipse.jdt.core.prefs

注意:你可以使用与super-checkout不同的别名。


查看git ls-tree文档以更好地理解。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接