获取修改后的文件

时间:2014-05-19 20:16:25

标签: git bash

我希望使用搜索模式列出修改过的文件

到目前为止,我已经做到了

git log --pretty=oneline | grep SEARCH_TEXT | cut -d' ' -f1

获得所有关注提交。我现在可以使用xargsgit log --pretty=oneline --name-only来获取所有文件,最后使用sort | uniq来使其保持干净,但我不是git和bash专家,我不是知道怎么做。

5 个答案:

答案 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