我从一个包含多个 eclipse 项目的大项目的其他几个分支 merge ,最终更改了一堆 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
不在子目录中搜索。要使用星号 check out 文件,您必须指定 git 可以找到它们的文件夹。
尽管如此,无论它们在存储库中的位置如何,都可以 check out 名称中包含特定字符串的所有文件。为此,我们必须结合使用一些命令。
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
documentation以便更好地理解。
关于eclipse - Git check out 多个同名文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27442311/