Git:仅提交指定的文件(重命名、删除、修改、新文件等)

Git: Commit Only Specified Files (Renamed, Deleted, Modified, New File, etc)

我有一个较旧的项目,我在其中修改了很多文件(超过一百个)。删除了几个,重命名了一大堆,删除了很多等等。这批更改中可能有 10 个或更多的提交值。我如何写一个commit命令到select,例如,只有那些重命名的文件:

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 }' | 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 来 select 仅第一个块,这很好用。谢谢!

您可以使用 git status --porcelain 到 select 仅特定类型的文件。例如,要 select 仅重命名文件,请使用如下内容:

$ git status --porcelain | grep -E '^(.R|R.)' | cut -b4- | \
  xargs git commit -m 'Renamed files'

输出的字母及其含义可以参考运行 git status --help.