"git commit --amend" 没有 "git add" / 改变暂存区

"git commit --amend" without "git add" / changing staging area

进一步开发后,我需要对之前的提交添加额外的更改。

我做了很多更改,包括 IDE,处理文件重命名、创建新文件等。

所以git status在暂存区显示了很多文件。

我不想用 git commit --amend --no-message 添加这个文件。

我可以将这些文件列为 git commit --amend --no-message 的参数吗?还有其他不影响索引的可能性吗?

我考虑存储索引 - 但是列出 40 个要忽略的文件而不是 2 个文件进行修改是一件很复杂的事情....

经过试验,我找到了一个简单(且显而易见)的解决方案:

$ echo x >> file1
$ echo x >> file2
$ echo y >> fileZZZ

(1)$ git add .

(2)$ git ci -m fix -- file1

(3)$ git commit --no-edit --amend -- file2

(1) 我将所有内容添加到索引中。在 (2) 我只提交选定的文件,在索引中留下其他文件(file2fileZZZ),在 (3) 我添加缺少的 file2 修复留下 fileZZZ 在索引中。

可以使用 Git 几乎忽略临时区域。

大多数 IDE 将暂存区反映为实际 Git 操作。 (我正在使用 VS Code,它确实如此。)因此,首先取消暂存所有文件:

git reset .

然后,通过 git add 或 IDE 按钮设置要暂存的文件。根据IDE界面,文件应该有一个加号按钮。

最后执行git commit --amend --no-message。语义应与正常提交相同。


如果您不知道如何执行上述操作,执行交互式变基来压缩提交也有帮助。参见 How to modify existing, unpushed commits?