Git undo别名工作不正常
希望获得有关使此别名正常工作的帮助:Git undo别名工作不正常,git,alias,Git,Alias,希望获得有关使此别名正常工作的帮助: [alias] undo = "!f() { git reset --hard HEAD@{$1-1}; }; f" 目标是能够执行: git undo不带任何参数,并将其还原到先前的操作(HEAD@{1}) git undo 2将回滚到之前的第二个操作 当我执行它时,我没有看到预期的行为: git撤销 致命:不明确的参数“HEAD@{-1}”:未知修订或路径不在 正在工作的树。使用“---”将路径与修订分开,如 这是:'git[…]--[…]'
[alias]
undo = "!f() { git reset --hard HEAD@{$1-1}; }; f"
目标是能够执行:
git undo
不带任何参数,并将其还原到先前的操作(HEAD@{1})
git undo 2
将回滚到之前的第二个操作
当我执行它时,我没有看到预期的行为:
git撤销
致命:不明确的参数“HEAD@{-1}”:未知修订或路径不在
正在工作的树。使用“---”将路径与修订分开,如
这是:'git[…]--[…]'
git undo 2
警告:“头部”的记录只能追溯到2016年3月18日星期五12:00:10
-0700.警告:“HEAD”的日志只能追溯到2016年3月18日星期五12:00:10-0700。HEAD现在是66b5b26初始提交
调用git undo 2
后,最新的reflog条目显示:
66b5b26头{0}:重置:移动到头{2-1}
如何正确设置此别名?如果我理解您的意思,您希望它的行为如下:
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
前面,它就会显示它将运行什么
正如在中提到的,并且在这里也值得一提的是,这将悄悄地删除工作目录中的本地更改,因此请谨慎使用。不完全清楚您到底想要什么。我假设您正在寻找这些扩展:
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"
请注意,此别名相当危险。它将自动删除工作目录中的所有本地更改。+1了解有关自动删除本地更改的说明。我可能会将其转换为一个shell脚本,在基于该点继续之前请求确认。