希望有一些帮助使这个别名正常工作:
[alias]
undo = "!f() { git reset --hard HEAD@{$1-1}; }; f"
目标是能够执行:
没有参数的 git undo
并将其恢复为先前的操作(HEAD @ {1})
git undo 2
将回滚到之前的第二个动作
当我执行它时,我没有看到预期的行为:
git undo
致命:含糊不清的论点'HEAD @ { - 1}':未知版本或路径不在 工作树。使用' - '将路径与修订分开,例如 这个:'git [...] - [...]'
git undo 2
警告:“HEAD”的日志只会追溯到2016年3月18日星期五12:00:10 -0700。警告:“HEAD”的日志仅返回2016年3月18日星期五12:00:10 -0700。 HEAD现在是66b5b26初始提交
调用git undo 2
后,最新的reflog条目显示:
66b5b26 HEAD @ {0}:重置:移至HEAD @ {2-1}
如何正确设置此别名?
答案 0 :(得分:2)
如果我理解你,你希望它表现得像这样:
git undo # HEAD@{1}
git undo 1 # HEAD@{1}
git undo 5 # HEAD@{5}
然后我相信这应该有用,假设像bash或zsh这样的shell:
undo = "!f() { git reset --hard HEAD@{${1-1}}; }; f"
如果你想看看它会做什么而不做任何事情,只需将echo
粘贴在别名的git reset
前面,它就会显示它会运行的内容。
正如another answer中提到的那样,并且这里也提到了权证,这将默默地删除工作目录中的本地更改,因此请谨慎使用。
答案 1 :(得分:2)
目前还不完全清楚你究竟是在追求什么。我假设您正在寻找这些扩展:
git undo ==> git reset --hard HEAD@{0}
git undo 1 ==> git reset --hard HEAD@{0}
git undo 2 ==> git reset --hard HEAD@{1}
git undo 3 ==> git reset --hard HEAD@{2}
如果您正在寻找,可以使用
undo = "!f() { git reset --hard HEAD@{$((${1:-1} - 1))}; }; f"
请注意,此别名相当危险。它将以静默方式删除工作目录中的所有本地更改。