【发布时间】:2015-07-08 03:32:24
【问题描述】:
在问题之前,有一点背景故事:
所以基本上我在我的一个项目中对大量源文件中的 cmets 进行了一些重大更新,并在文件顶部添加了关于每个文件的快速描述作为注释(以及代码本身)。
然后我决定完成并完成此操作,我将在描述符中添加其他信息 - 例如作者、日期等。因此,我决定使用正则表达式在文件中查找和替换以选择文件的完整内容并将其替换为标题中的一些额外信息,以保留文件中曾经存在的所有内容。当我在 Verilog 中工作时,每个文件的末尾都有一个 endmodule,所以我用它作为标记来确保我得到了正则表达式中的所有内容。
不幸的是,我忘记将endmodule 添加回替换字符串,所以基本上在大约数百个源文件中,我丢失了最后一行。不是太大的问题,很容易找到并替换它们。经验教训。
无论如何,我一开始并没有意识到这一点,所以我花了一个小时左右的时间将源文件分组到我的 github 存储库的一系列提交中。幸运的是,在将这些提交推送到源之前,我注意到了 endmodule 问题,因此我能够使用 git reset --soft HEAD~4 命令删除这些提交以摆脱我的 3 个提交。
在我这样做之前,我使用了git show 命令来获取提交描述和包含在每个提交中的文件列表,我现在已经保存在一个文本文件中。我希望使用这些来重新创建已将所有 endmodule 标签放回的提交。
但是今晚我的 Google 功能让我失望了,因为我似乎无法找到一种方法来提交包含文件列表中的所有更改的提交。理想情况下,我想要一些可以在 git shell (Windows Powershell) 中运行的命令,它可能会读取一个包含文件列表的文本文件。然后,我希望将所有这些文件添加到具有与以前相同的消息和扩展描述的新提交中(我可以将这些文件复制并粘贴到任何命令中)。
是否有任何方法可以作为 git 的一部分执行此操作,还是我需要使用 powershell 脚本来发挥创意?
我从这个SO question 看到,您可以使用git commit [files] 来创建仅包含特定文件的新提交。我想我可以按照惯例添加 -m 开关来添加消息。但是如何在文件列表中通过管道替换[files]。
现在我刚刚拿到我的列表,手动将其转换为一行并将其粘贴到对我有用的命令中。但是从下图可以看出,这很明显非常很难看。
我确信必须有一种更简洁的方法来执行此操作,因此即使我的问题现在已解决,我仍然想知道是否可以执行 [files] 占位符所在的命令以供将来参考替换为每行包含一个文件名的文件的内容。
【问题讨论】:
-
git add -u将添加所有提交的文件,这些文件是 a) 已被跟踪且 b) 自上次提交以来已被修改 -
@twalberg 问题是我想要文件在我所做的三个单独的提交中。但是因为我必须进行软重置,所以三个提交的所有文件都被跟踪,所以我需要一种分离它们的方法,而不必手动添加每个所需的文件。
标签: git powershell github-for-windows