我希望使用搜索模式列出修改过的文件
到目前为止,我已经做到了git log --pretty=oneline | grep SEARCH_TEXT | cut -d' ' -f1
获得所有关注提交。我现在可以使用xargs
和git log --pretty=oneline --name-only
来获取所有文件,最后使用sort | uniq
来使其保持干净,但我不是git和bash专家,我不是知道怎么做。
答案 0 :(得分:2)
使用git log --pretty=oneline
,您将获得提交的ID-s
然后你可以检查下一个命令:
git show --name-only {sha-id}
还有:
使用此git diff-tree --no-commit-id --name-only -r <sha-id>
可以获得修改并包含在该特定提交中的文件,具体取决于输出和排序
git diff-tree --no-commit-id --name-only -r <sha-id> |sort -r -n -k5
这将从最大的文件开始排序。 -n运算符指定&#34;数字&#34;排序与字母相比。
答案 1 :(得分:2)
要继续使用bash脚本编写方法,您可以执行以下操作:
for i in `git log --pretty=oneline | grep SEARCH_PATTERN | cut -d ' '
-f1 `; do git show --pretty="format:" --name-only $i; done | sort | uniq
或使用 xargs :
git log --pretty=oneline | grep SEARCH_PATTERN | cut -d ' ' -f1 | xargs git
show --pretty="format:" --name-only | sort | uniq
答案 2 :(得分:1)
如果我理解你想要以[commit_id] [file(s)_changed]格式创建一个列表。它是正确的尝试以下:
[root@TIAGO-TEST git]# git log --pretty=oneline| awk '{print $1}'|while read commit; do path=$(git show --name-only $commit | egrep -v '^(commit|Author|Date:|Merge:|^\s|$)'); echo $commit $path; done
d8c86ba5feca19c7ca9dba4a60a7e5c5dd24d134
f2555bb80b190a7640ea7c1cbda76a5abfd61d17 config_example.cfg graph_explorer/validation.py
7750db9820af7c6ea8612a4d72a4ad22da9bb1d4 graph_explorer/assets/js/graph-explorer.js
201ac16e4aa1650155c58406cb93e4ec00ca0424 graph_explorer/preferences_color.py
c89af43090de2528de6c5feb20a6388d535358c4 graph_explorer/templates/graphs.tpl
e5307533ee3da66eadb76f1108ada7a9a8b42f75 config_example.cfg
d42d45e2ce937b52699a5b58922c416f9b21db5d config_example.cfg graph_explorer/templates/snippet.graph.tpl
a5ccfad2328fc8d24a9c117e901b36e720aa4e98 README.md config_example.cfg
4186cbcdeb79d8e85ae818f711841177fa33b560 graph_explorer/timeserieswidget
da46261fd5c8aa5352e73e97da95324285ef4245 graph_explorer/timeserieswidget
一旦你有了这个清单,就可以找到你想要的任何模式。
答案 3 :(得分:0)
如果要列出自第一次提交以来所有已修改的文件,可以使用
git diff --name-only $(git rev-list --max-parents=0 HEAD)
然后您可以根据需要对其进行排序或grep
答案 4 :(得分:0)
感谢您的帮助,我用这个实现了我想要的目标
git log --pretty=oneline | grep SEARCH_PATTERN | cut -d' ' -f1 | xargs git show --name-only --pretty=format: | sort | uniq