The rev spec forms @{}, .., ... fill in HEAD as the missing argument automatically. Unfortunately, HEAD~<n> is a very common idiom and there is no way to make HEAD implicit here (due the shell expansion of ~<n>). However, there is an alternative solution to the issue: overload the character @ to mean HEAD. Do this at the lowest possible layer of abstraction: in dwim_ref(), substitute @ with HEAD just before calling resolve_ref_unsafe(). The program will only reach this point after the other specs like ~, ^ and @{} have been resolved; therefore, it is safe to do it here. This patch has the exact same effect as: $ git symbolic-ref @ HEAD It means that you can now do @~1, @^2, and even topic..@. However, since the @-parsing happens before we ever reach the symref resolution, @@{u} is invalid. But this is okay, since @{u} already has an implicit HEAD in it. Inspired-by: Felipe Contreras <felipe.contreras@xxxxxxxxx> Inspired-by: Michael Haggerty <mhagger@xxxxxxxxxxxx> Signed-off-by: Ramkumar Ramachandra <artagnon@xxxxxxxxx> --- I haven't included documentation/ tests because I want feedback on this two-liner first. refs.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/refs.c b/refs.c index de2d8eb..cb67b73 100644 --- a/refs.c +++ b/refs.c @@ -1604,6 +1604,8 @@ int dwim_ref(const char *str, int len, unsigned char *sha1, char **ref) this_result = refs_found ? sha1_from_ref : sha1; mksnpath(fullref, sizeof(fullref), *p, len, str); + if (!strcmp(fullref, "@")) + mksnpath(fullref, sizeof(fullref), *p, 4, "HEAD"); r = resolve_ref_unsafe(fullref, this_result, 1, &flag); if (r) { if (!refs_found++) -- 1.8.2.1.628.gcd33b41.dirty -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html