我有一个旧项目,在那里我修改了很多文件(超过一百个(。删除了几个,重命名了一整堆,删除了很多,等等。在这批更改中可能有10个或更多的提交。例如,我如何编写一个提交命令来只选择那些重命名的文件:
git commit "all renamed files" -m "Renamed files."
我想尽量避免做这样的事情:
git commit file1 file2 file3 -m "Renamed files."
因为太多了。我也可以提交一个值(git commit folder1 . . .
(的文件夹,但不幸的是,文件夹中有一些文件没有提交。
我已经接受了提供的答案,但不得不修改一下命令:
git status --porcelain | grep -E '^(.R|R.)' |
cut -b4- | awk '{print $1}' | xargs git commit -m "Bulk renamed files."
原因是,例如,运行git status --porcelain | grep -E '^(.R|R.)' | cut -b4-
会输出(这里有一行要演示(:source/__init__.py -> site/__init__.py
。当我使用xargs
运行commit
命令时,它是不被接受的,可能是因为-> . . .
部分。所以我在这里使用awk
只选择第一个块,这很好。谢谢
您可以使用git status --porcelain
仅选择特定类型的文件。例如,要只选择重命名的文件,请使用以下内容:
$ git status --porcelain | grep -E '^(.R|R.)' | cut -b4- |
xargs git commit -m 'Renamed files'
通过运行git status --help
可以看到输出的字母及其含义。