使用git将所有已删除的文件添加到一个提交中

53

我已经在一个分支上进行了一轮更改,有10个修改过的文件和10个已删除的文件。

如果我运行git add .,这只会将修改过的文件添加到我的提交中。我想要从远程存储库中删除已删除的文件,同时添加我的修改后的文件。

我可以使用git rm filename,但由于我有很多文件需要删除,所以我想知道是否有一种方法可以删除所有文件。

我通过谷歌搜索发现git rm -r *,但这似乎不起作用。

有没有命令可以让我做到这一点?


1
要将一个已删除的文件添加到提交中,您可以执行 git add what/the/path/to/the/file/used/to/be。当您有一两个删除要添加时,这很有帮助,但不能在一个命令中添加一批删除。 - Kevin
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Gayan
7个回答

62

如果你想将所有更改和删除的文件进行暂存并在一行中提交:

git commit -am "changing and deleting files"

注意,这个命令不会添加新文件,因为Git是用来跟踪变更的。它依赖于您告诉它哪些文件很重要需要跟踪。

如果您有一些文件需要跟踪或者只想在提交之前暂存更改,您必须手动添加文件或使用通配符:

  • git add -A 暂存所有(包括新文件、修改和删除)
  • git add . 暂存新文件和修改文件,但不包括删除文件
  • git add -u 暂存修改和删除文件,但不包括新文件

然后进行提交:

git commit -m "..."

3
在Git的版本2.29.2及以上,运行命令git add .会将已删除的文件也加入到暂存区。 - Caleb Miller
啊,大写字母“A”起了很大的作用!谢谢! - Stryker2k2

25

尝试以下操作:

git add -u命令将所有更改(包括已删除/更新的文件)添加到暂存区。

然后运行git commit -m '你的提交信息'即可提交更改。


1
这让我节省了很多时间,而不必打开其他的UI程序。 - Anthony Kal
1
git文档中:-u --update 只更新索引文件中与 <pathspec> 匹配的条目。它会移除或修改索引文件中的条目以匹配工作区,但不会添加新文件。 - bvanlew

6

5
要将已删除的文件添加到git索引中,请运行以下命令:

git add 文件名

git add --all .

4
在执行 git rm -r * 命令之后,您需要提交文件并进行推送,然后您就会看到变化。
git add . 
git commit -m 'Remove all files'
git push

希望能对你有所帮助 :)

1
但我不想提交所有的文件。我只想提交几个文件,并提交已删除的文件。我该怎么做? - Santosh
你可以为每个想要的文件使用 git add <文件名> - EQuimper
1
当我尝试添加已删除的文件名称时,它会显示文件未找到。 - Santosh

4
可以利用标准的shell工具。在这种情况下,使用grep、xargs和awk(或它们的新/快/不同的替代品,如nawk或ripgrep)。
建议的命令是:
git status | grep <state> | awk -F ':' '{print $2}' | xargs git add

# or
git status | grep <state> | awk -F ':' '{print $2}' | xargs git commit -m "<msg>"

# for deleted files only:
git status | grep deleted | awk -F ':' '{print $2}' | git commit -m "<msg>"

如果您掌握每个工具,则该命令大多是不言自明的。如果您不知道,请学习它们,它们很有用。简而言之:grep查找具有指定状态(例如“已删除”)的行。awk过滤第二列。xargs将其转换为参数格式。

为此/这些流程创建别名使其成为一项微不足道的任务。


2
为了影响远程服务器中的更改,您需要从本地机器上进行push更改,并从远程服务器进行pull
使用git add .来跟踪所有更改。
使用git commit -m“your message”进行提交。
使用git push origin [your-branch]将更改推送到您的远程存储库。
现在通过ssh连接到远程服务器,导航到项目路径并执行pull以获取这些更改。
git pull origin [your-branch]

那么这些文件将会从您的远程服务器上删除。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接