Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git undo别名工作不正常_Git_Alias - Fatal编程技术网

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脚本,在基于该点继续之前请求确认。