Git one liner恢复不需要的子模块更改

Git one liner恢复不需要的子模块更改,git,Git,所以,假设我搞砸了,运行了git commit-a,意外地提交了一个我不想要的子模块更改(可能是因为我运行了git pull,然后忘记运行git submodule update)。我想把这零钱扔掉。有没有一个班轮我可以用来做这个 我今天的做法是: 我运行gitshow来找出旧散列是什么 我将cd放入子模块,然后运行git reset--hard OLD_HASH 返回父目录并git提交--amend-a 这是太多的步骤。真的没有更短的吗 注意:这个问题与用户意外地对子模块中的文件进行了实际更改

所以,假设我搞砸了,运行了
git commit-a
,意外地提交了一个我不想要的子模块更改(可能是因为我运行了
git pull
,然后忘记运行
git submodule update
)。我想把这零钱扔掉。有没有一个班轮我可以用来做这个

我今天的做法是:

  • 我运行
    gitshow
    来找出旧散列是什么
  • 我将
    cd
    放入子模块,然后运行
    git reset--hard OLD_HASH
  • 返回父目录并
    git提交--amend-a
  • 这是太多的步骤。真的没有更短的吗

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

    您可以通过编写脚本来编写一行程序。剧本本身不可避免地不止一行。如果您愿意,它可以是这三行,也可以是其他三行(例如,
    git rev parse
    、精心构造的
    git更新索引
    、以及
    git commit--amend
    )。您可以将该脚本制作成Git命令(将其命名为
    Git-foo
    并将其放入您的路径中,然后
    Git-foo
    将运行您的
    Git-foo
    脚本),或者使用
    Git-config
    [alias]
    部分将其制作成Git别名

    您可能希望使用
    子模块来设置您的设置,以便在将来不太可能发生这种情况。例如,递归
    。(请注意,除非您还设置了
    push.recurseSubmodules
    ,否则这会影响git push;详细信息请参阅中的所有子模块设置)