Git 撤消别名无法正常工作
Git undo alias not working properly
需要一些帮助来使这个别名正常工作:
[alias]
undo = "!f() { git reset --hard HEAD@{-1}; }; f"
目标是能够执行:
git undo
没有参数并让它恢复到先前的操作 (HEAD@{1})
git undo 2
将回滚到第二个先前的操作
当我执行它时,我没有看到预期的行为:
git 撤销
fatal: ambiguous argument 'HEAD@{-1}': unknown revision or path not in
the working tree. Use '--' to separate paths from revisions, like
this: 'git [...] -- [...]'
git 撤消 2
warning: Log for 'HEAD' only goes back to Fri, 18 Mar 2016 12:00:10
-0700. warning: Log for 'HEAD' only goes back to Fri, 18 Mar 2016 12:00:10 -0700. HEAD is now at 66b5b26 Initial commit
调用 git undo 2
后,最新的 reflog 条目显示:
66b5b26 HEAD@{0}: reset: moving to HEAD@{2-1}
如何正确设置此别名?
如果我理解你的话,你希望它表现得像这样:
git undo # HEAD@{1}
git undo 1 # HEAD@{1}
git undo 5 # HEAD@{5}
然后我相信这应该有效,假设 shell 像 bash 或 zsh:
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"
请注意,此别名相当危险。它会默默地删除您工作目录中的所有本地更改。
需要一些帮助来使这个别名正常工作:
[alias]
undo = "!f() { git reset --hard HEAD@{-1}; }; f"
目标是能够执行:
git undo
没有参数并让它恢复到先前的操作 (HEAD@{1})
git undo 2
将回滚到第二个先前的操作
当我执行它时,我没有看到预期的行为:
git 撤销
fatal: ambiguous argument 'HEAD@{-1}': unknown revision or path not in the working tree. Use '--' to separate paths from revisions, like this: 'git [...] -- [...]'
git 撤消 2
warning: Log for 'HEAD' only goes back to Fri, 18 Mar 2016 12:00:10 -0700. warning: Log for 'HEAD' only goes back to Fri, 18 Mar 2016 12:00:10 -0700. HEAD is now at 66b5b26 Initial commit
调用 git undo 2
后,最新的 reflog 条目显示:
66b5b26 HEAD@{0}: reset: moving to HEAD@{2-1}
如何正确设置此别名?
如果我理解你的话,你希望它表现得像这样:
git undo # HEAD@{1}
git undo 1 # HEAD@{1}
git undo 5 # HEAD@{5}
然后我相信这应该有效,假设 shell 像 bash 或 zsh:
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"
请注意,此别名相当危险。它会默默地删除您工作目录中的所有本地更改。