我在一个大型项目中与其他几个分支合并了多个eclipse项目,并最终改变了一堆org.eclipse.jdt.core.prefs设置,我想在我的分支上恢复。是否有魔术命令我可以用来重置'只有这些文件,在我的git repo中的所有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.
这是因为*?我怎么能绕过它?
答案 0 :(得分:3)
问题源于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
documentation以便更好地理解。