Browse files

clone: Supply the right commit hash to post-checkout when -b is used

When we use -b <branch>, we may checkout something else than what the
remote's HEAD references, but we still used remote_head to supply the
new ref value to the post-checkout hook, which is wrong.

So instead of using remote_head to find the value to be passed to the
post-checkout hook, we have to use our_head_points_at, which is always
correctly setup, even if -b is not used.

This also fixes a segfault when "clone -b <branch>" is used with a
remote repo that doesn't have a valid HEAD, as in such a case
remote_head is NULL, but we still tried to access it.

Reported-by: Devin Cofer <>
Signed-off-by: Björn Steinbrink <>
Acked-by: Jeff King <>
Signed-off-by: Junio C Hamano <>
  • Loading branch information...
1 parent c6dfb39 commit d01a8e32fe10f1086e5e427f85237baff218fb01 @dotdash dotdash committed with gitster Oct 13, 2009
Showing with 3 additions and 1 deletion.
  1. +2 −1 builtin-clone.c
  2. +1 −0 remote-curl.c
3 builtin-clone.c
@@ -641,7 +641,8 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
die("unable to write new index file");
err |= run_hook(NULL, "post-checkout", sha1_to_hex(null_sha1),
- sha1_to_hex(remote_head->old_sha1), "1", NULL);
+ sha1_to_hex(our_head_points_at->old_sha1), "1",
+ NULL);
if (!err && option_recursive)
err = run_command_v_opt(argv_submodule, RUN_GIT_CMD);
1 remote-curl.c
@@ -3,6 +3,7 @@
#include "strbuf.h"
#include "walker.h"
#include "http.h"
+#include "exec_cmd.h"
static struct ref *get_refs(struct walker *walker, const char *url)

0 comments on commit d01a8e3

Please sign in to comment.