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

nic*_*ius 1 regex git rename git-commit

我有一个较旧的项目,我修改了许多文件(超过一百个)。删除了几个,重命名了一大堆,删除了很多等等。这批更改中可能有 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."
Run Code Online (Sandbox Code Playgroud)

这样做的原因是因为运行git status --porcelain | grep -E '^(.R|R.)' | cut -b4-,例如,输出(这里的一条线来证明)source/__init__.py -> site/__init__.py。当我xargs用来运行commit命令时,它不被接受,大概是因为-> . . .零件。所以我awk在这里只选择第一个块,这很好用。谢谢!

bk2*_*204 5

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

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

通过运行可以看到输出的字母及其含义git status --help