)]}'
{
  "commit": "c84ed3a0abe901504ddb41e1685ebac7ba1c489c",
  "tree": "d4b49ce3afb6d78bf06b232ceb63caf1f353d440",
  "parents": [
    "e9019fcafe0040228b8631c30f97ae1adb61bcdc"
  ],
  "author": {
    "name": "Aleksei Sviridkin",
    "email": "f@lex.la",
    "time": "Tue Sep 29 12:13:18 2026 +0300"
  },
  "committer": {
    "name": "Junio C Hamano",
    "email": "gitster@pobox.com",
    "time": "Tue Sep 29 09:52:12 2026 -0700"
  },
  "message": "push: fix --force-if-includes when remote-tracking ref has no reflog\n\nSince 99a1f9ae10 (push: add reflog check for \"--force-if-includes\",\n2020-10-03), is_reachable_in_reflog() looks for the remote tip in the\nlocal branch\u0027s reflog and stops at entries older than the newest entry\nof the remote-tracking ref\u0027s reflog. That timestamp comes from a\ncallback of refs_for_each_reflog_ent_reverse(), which never runs when\nthe remote-tracking ref has no reflog, so the variable stays\nuninitialized.\n\nWith the files backend a remote-tracking ref that \"git clone\" created\nhas no reflog until it moves. On my machine the leftover value exceeded\nany real timestamp, so the walk stopped at the first entry and the push\nwas rejected with \"remote ref updated since checkout\" though nothing on\nthe remote had changed.\n\nThat stopping point assumes an entry older than the last recorded move\nof the remote-tracking ref cannot be the one we want. The record itself\ncan be missing: never written, deleted, or expired by gc. Initialize\nthe timestamp to zero for a missing record. timestamp_t is unsigned, so\nnothing compares older and the walk stops only at the remote tip or at\nthe end of the local reflog. \"Now\" brings the bug straight back. A\nfixed age narrows it: the push is rejected when the remote tip is\nrecorded only past the first entry older than that age and nothing\ncollected reaches it.\n\nWhen the remote tip is not in the local reflog at all, a stopped walk\nand a full one fall back to the same merge-base check, and the full one\nhands it more entries.\n\nSigned-off-by: Aleksei Sviridkin \u003cf@lex.la\u003e\nSigned-off-by: Junio C Hamano \u003cgitster@pobox.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "00723b385e1d5247e1903d309f34b8d706b51452",
      "old_mode": 33188,
      "old_path": "remote.c",
      "new_id": "6d301698ca75f266fddd2dcfeee3132f0b0f7484",
      "new_mode": 33188,
      "new_path": "remote.c"
    },
    {
      "type": "modify",
      "old_id": "cba26a872dde465c01cd99782029811cf2da9acf",
      "old_mode": 33261,
      "old_path": "t/t5533-push-cas.sh",
      "new_id": "c9aaeec8d196d456bc3df08845c1e6d506c03de8",
      "new_mode": 33261,
      "new_path": "t/t5533-push-cas.sh"
    }
  ]
}
