Git 单行代码可还原不需要的子模块更改



所以,假设我搞砸了并运行了git commit -a,不小心提交了我不想要的子模块更改(可能是因为我运行了git pull并且之后忘记运行git submodule update)。我想摆脱这种变化。我可以使用单行代码来执行此操作吗?

我今天这样做的方式是:

  1. 我跑git show弄清楚旧的哈希是什么
  2. cd子模块,然后运行git reset --hard OLD_HASH
  3. 返回父目录并git commit --amend -a

这是太多的步骤。真的没有比这更短的了吗?

注意:这个问题不同于如何将更改还原到 git 子模块? 用户意外地对子模块中的文件进行了实际更改。在这种情况下,没有在子模块中编辑任何文件;我只是在错误的方向上更新了提交指针。

您可以通过编写脚本来编写单行代码。 脚本本身不可避免地会不止一行。 如果你愿意,它可以是这三条线,也可以是其他三条左右的线(例如,git rev-parse,一个精心构造的git update-index,和git commit --amend)。 您可以将该脚本创建为 Git 命令(通过将其命名为git-foo并将其放在您的路径中,之后git foo将运行您的git-foo脚本),或者使用git config[alias]部分将其制作为 Git 别名。

您可能希望设置设置,以便将来不太可能发生,例如使用submodule.recursetrue。 (请注意,这会影响git push除非您还设置了push.recurseSubmodules;仔细阅读git config文档中的所有子模块设置以获取更多信息)。

最新更新