)]}'
{
  "commit": "f3f8311ec76f9bcdc7e26a125e585eb4e473a8d2",
  "tree": "caa84e1112e300a06e7361ed03624e3c8a0f804f",
  "parents": [
    "b64335554a3691cbc134fb73a598dfd593f44b4e"
  ],
  "author": {
    "name": "Nguyễn Thái Ngọc Duy",
    "email": "pclouds@gmail.com",
    "time": "Sat May 18 18:30:43 2019 +0700"
  },
  "committer": {
    "name": "Junio C Hamano",
    "email": "gitster@pobox.com",
    "time": "Sun May 19 10:47:40 2019 +0900"
  },
  "message": "merge: add --quit\n\nThis allows to cancel the current merge without resetting worktree/index,\nwhich is what --abort is for. Like other --quit(s), this is often used\nwhen you forgot that you\u0027re in the middle of a merge and already\nswitched away, doing different things. By the time you\u0027ve realized, you\ncan\u0027t even continue the merge anymore.\n\nThis also makes all in-progress commands, am, merge, rebase, revert and\ncherry-pick, take all three --abort, --continue and --quit (bisect has a\ndifferent UI).\n\nSigned-off-by: Nguyễn Thái Ngọc Duy \u003cpclouds@gmail.com\u003e\nSigned-off-by: Junio C Hamano \u003cgitster@pobox.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "4cc86469f3dd45564b40b327d1b39f2bb213bb98",
      "old_mode": 33188,
      "old_path": "Documentation/git-merge.txt",
      "new_id": "b7d581fc76f8d768838ed5790af19827efe088be",
      "new_mode": 33188,
      "new_path": "Documentation/git-merge.txt"
    },
    {
      "type": "modify",
      "old_id": "e9663f027ada2807e62a1ce625d2bffca0332dac",
      "old_mode": 33188,
      "old_path": "builtin/merge.c",
      "new_id": "598d56edfeb30a1a58ea0cf8b9dbdd0e4e2ba166",
      "new_mode": 33188,
      "new_path": "builtin/merge.c"
    },
    {
      "type": "modify",
      "old_id": "106148254d0ce067e8f5f842faac8fbf1ee90f15",
      "old_mode": 33261,
      "old_path": "t/t7600-merge.sh",
      "new_id": "625a24a980c89a5fdda22c20860aa4675d7562c0",
      "new_mode": 33261,
      "new_path": "t/t7600-merge.sh"
    }
  ]
}
