因此,假设我搞砸了并运行git commit -a
,意外地提交了一个我不想要的子模块更改(可能是因为我运行了git pull
而后来却忘记了运行git submodule update
) 。我想摆脱这种变化。我可以使用单线吗?
我今天这样做的方式是:
git show
来找出旧哈希是什么cd
进入子模块,然后运行git reset --hard OLD_HASH
git commit --amend -a
这是太多步骤。真的没有更短的东西了吗?
NB:此问题与How do I revert my changes to a git submodule?不同,在{{3}}中,用户意外地对子模块中的文件进行了实际更改。在这种情况下,子模块中没有文件被编辑;我只是在错误的方向上更新了提交指针。
答案 0 :(得分:1)
您可以通过编写脚本来编写单行代码。脚本本身不可避免地会超过一行。如果需要,可以是这三行,也可以是其他三行左右的集合(例如git rev-parse
,精心构造的git update-index
和git commit --amend
)。您可以将该脚本制作为Git命令(通过将其命名为git-foo
并将其放置在路径中,然后git foo
将运行您的git-foo
脚本)或使用以下命令将其制作为Git别名git config
和[alias]
部分。
您可能希望进行设置,以免将来发生这种情况,例如使用submodule.recurse
至true
。 (请注意,这会影响git push
,除非您还设置了push.recurseSubmodules
;请仔细阅读the git config
documentation中的所有子模块设置。)