PageSourceSearch

https://git-cliff.org/assets/js/0d607595.67125d49.js

js git-cliff.org collected 2026-10-03 21:50:58 UTC 23,522 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunkgit_cliff_website=self.webpackChunkgit_cliff_website||[]).push([[167],{6594:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>c,contentTitle:()=>l,default:()=>d,frontMatter:()=>o,metadata:()=>t,toc:()=>h});var t=n(8703),s=n(4848),r=n(8453);const o={slug:"2.0.0",title:"What's new in 2.0.0?",date:new Date("2024-02-19T00:00:00.000Z"),authors:"orhun",tags:["release"]},l=void 0,c={authorsImageUrls:[void 0]},h=[{value:"What&#39;s new? \u26f0\ufe0f",id:"whats-new-\ufe0f",level:2},{value:"\ud83d\ude80 GitHub Integration",id:"-github-integration",level:3},{value:"\ud83e\udd80 RustLab 2023",id:"-rustlab-2023",level:3},{value:"\ud83d\udccb Built-in Templates",id:"-built-in-templates",level:3},{value:"\ud83d\udcc4 Footer Template",id:"-footer-template",level:3},{value:"\ud83e\uddf6 Improve Skipping",id:"-improve-skipping",level:3},{value:"1. <code>.cliffignore</code>",id:"1-cliffignore",level:4},{value:"2. <code>--skip-commit</code>",id:"2---skip-commit",level:4},{value:"\ud83d\udda8\ufe0f Print Bumped Version",id:"\ufe0f-print-bumped-version",level:3},{value:"\ud83d\udeab Disable Command Execution",id:"-disable-command-execution",level:3},{value:"\ud83d\udd04 Filter Merge Commits",id:"-filter-merge-commits",level:3},{value:"\ud83d\udd0d Match by commit SHA",id:"-match-by-commit-sha",level:3},{value:"\ud83d\udd20 Regex Scope Values",id:"-regex-scope-values",level:3},{value:"\ud83d\udcc8 Bump Improvements",id:"-bump-improvements",level:3},{value:"\ud83d\udcda Documentation Improvements",id:"-documentation-improvements",level:3},{value:"\ud83c\udf10 Website Improvements",id:"-website-improvements",level:3},{value:"\ud83e\uddf0 Other",id:"-other",level:3},{value:"Contributions \ud83d\udc65",id:"contributions-",level:2},{value:"Support \ud83c\udf1f",id:"support-",level:2}];function a(e){const i={a:"a",admonition:"admonition",blockquote:"blockquote",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",hr:"hr",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("center",{children:(0,s.jsx)("a",{href:"https://github.com/orhun/git-cliff",children:(0,s.jsx)("img",{src:"/img/git-cliff-anim.gif"})})}),"\n",(0,s.jsxs)(i.blockquote,{children:["\n",(0,s.jsxs)(i.p,{children:[(0,s.jsx)(i.a,{href:"https://github.com/orhun/git-cliff",children:(0,s.jsx)(i.strong,{children:"git-cliff"})})," is a command-line tool (written in ",(0,s.jsx)(i.a,{href:"https://www.rust-lang.org/",children:"Rust"}),") that provides a highly customizable way to generate changelogs from git history."]}),"\n",(0,s.jsxs)(i.p,{children:["It supports using ",(0,s.jsx)(i.a,{href:"/docs/configuration/git#commit_parsers",children:"custom regular expressions"})," to alter changelogs which are mostly based on ",(0,s.jsx)(i.a,{href:"/docs/configuration/git#conventional_commits",children:"conventional commits"}),". With a single ",(0,s.jsx)(i.a,{href:"/docs/configuration",children:"configuration file"}),", a wide variety of formats can be applied for a changelog, thanks to the Jinja2/Django-inspired ",(0,s.jsx)(i.a,{href:"/docs/category/templating",children:"template engine"}),"."]}),"\n",(0,s.jsxs)(i.p,{children:["More information and examples can be found in the ",(0,s.jsx)(i.a,{href:"https://github.com/orhun/git-cliff",children:"GitHub repository"}),"."]}),"\n"]}),"\n",(0,s.jsx)(i.h2,{id:"whats-new-\ufe0f",children:"What's new? \u26f0\ufe0f"}),"\n",(0,s.jsxs)(i.p,{children:["The full changelog can be found ",(0,s.jsx)(i.a,{href:"https://github.com/orhun/git-cliff/blob/main/CHANGELOG.md",children:"here"}),"."]}),"\n",(0,s.jsx)(i.h3,{id:"-github-integration",children:"\ud83d\ude80 GitHub Integration"}),"\n",(0,s.jsxs)(i.p,{children:["This highly requested feature is now experimentally available with the ",(0,s.jsx)(i.code,{children:"2.0.0"})," version of ",(0,s.jsx)(i.code,{children:"git-cliff"}),"!"]}),"\n",(0,s.jsx)(i.p,{children:"For repositories hosted on GitHub, you can now use the following variables in your changelog:"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["GitHub usernames (",(0,s.jsx)(i.co
1de,{children:"${{ commit.github.username }}"})," or ",(0,s.jsx)(i.code,{children:"${{ contributor.username }}"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:["Contributors list (",(0,s.jsx)(i.code,{children:"${{ github.contributors }}"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:["Pull requests (",(0,s.jsx)(i.code,{children:"${{ commit.github.pr_number }}"})," or ",(0,s.jsx)(i.code,{children:"${{ contributor.pr_number }}"}),")"]}),"\n"]}),"\n",(0,s.jsx)(i.p,{children:"To quickly set things up for your project, you can use the built-in GitHub template:"}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-sh",children:"# creates cliff.toml\n$ git cliff --init github\n"})}),"\n",(0,s.jsxs)(i.p,{children:["And simply run ",(0,s.jsx)(i.code,{children:"git cliff"})," to generate a changelog like the following:"]}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-md",children:"## What's Changed\n\n- feat(commit): add merge_commit flag to the context by @orhun in #389\n- test(fixture): add test fixture for bumping version by @orhun in #360\n\n## New Contributors\n\n- @someone made their first contribution in #360\n- @cliffjumper made their first contribution in #389\n\n\x3c!-- generated by git-cliff --\x3e\n"})}),"\n",(0,s.jsx)(i.admonition,{type:"tip",children:(0,s.jsxs)(i.p,{children:["For detailed documentation and usage examples, check out the ",(0,s.jsx)(i.a,{href:"/docs/integration/github",children:"GitHub integration"}),"!"]})}),"\n",(0,s.jsx)(i.hr,{}),"\n",(0,s.jsx)(i.h3,{id:"-rustlab-2023",children:"\ud83e\udd80 RustLab 2023"}),"\n",(0,s.jsxs)(i.p,{children:["I gave a talk about ",(0,s.jsx)(i.code,{children:"git-cliff"})," at ",(0,s.jsx)(i.a,{href:"https://rustlab.it/talks/turning-git-commits-into-changelog-with-git-cliff",children:"RustLab 2023"})," - you can watch the recording here:"]}),"\n",(0,s.jsx)("iframe",{width:"100%",height:"315",src:"https://www.youtube.com/embed/RWh8qbiLRts?si=BDBCBtu2nVPGSAAJ",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share",allowfullscreen:!0}),"\n",(0,s.jsx)(i.hr,{}),"\n",(0,s.jsx)(i.h3,{id:"-built-in-templates",children:"\ud83d\udccb Built-in Templates"}),"\n",(0,s.jsxs)(i.p,{children:["As briefly mentioned, the example templates are now embedded into the binary which means you can quickly initialize ",(0,s.jsx)(i.code,{children:"git-cliff"})," or generate a changelog using one of them."]}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-sh",children:"# creates cliff.toml with keepachangelog template\n$ git cliff --init keepachangelog\n"})}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-sh",children:"# generates a changelog in keepachangelog format\n$ git cliff --config keepachangelog\n"})}),"\n",(0,s.jsx)(i.p,{children:"Here is the full list of supported templates as of now:"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.a,{href:"https://github.com/orhun/git-cliff/tree/main/examples/keepachangelog.toml",children:(0,s.jsx)(i.code,{children:"keepachangelog.toml"})}),": changelog in ",(0,s.jsx)(i.a,{href:"https://keepachangelog.com/en/1.1.0/",children:"Keep a Changelog format"}),"."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.a,{href:"https://github.com/orhun/git-cliff/tree/main/examples/github.toml",children:(0,s.jsx)(i.code,{children:"github.toml"})}),": changelog in the ",(0,s.jsx)(i.a,{href:"https://docs.github.com/en/repositories/releasing-projects-on-github/automatically-generated-release-notes",children:"GitHub's format"}),"."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.a,{href:"https://github.com/orhun/git-cliff/tree/main/examples/github-keepachangelog.toml",children:(0,s.jsx)(i.code,{children:"github-keepachangelog.toml"})}),": combination of the previous two formats."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.a,{href:"https://github.com/orhun/git-cliff/tree/main/examples/detailed.toml",children:(0,s.jsx)(i.code,{children:"detailed.toml"})}),": changelog that contains links to the commits."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.a,{href:"https://github.com/orhun/git-cliff/tree/main/examples/minimal.toml",children:(0,s.jsx)(i.co
1de,{children:"minimal.toml"})}),": minimal changelog."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.a,{href:"https://github.com/orhun/git-cliff/tree/main/examples/scoped.toml",children:(0,s.jsx)(i.code,{children:"scoped.toml"})}),": changelog with commits are grouped by their scopes."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.a,{href:"https://github.com/orhun/git-cliff/tree/main/examples/scopesorted.toml",children:(0,s.jsx)(i.code,{children:"scopesorted.toml"})}),": changelog with commits grouped by their scopes and sorted by group."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.a,{href:"https://github.com/orhun/git-cliff/tree/main/examples/cocogitto.toml",children:(0,s.jsx)(i.code,{children:"cocogitto.toml"})}),": changelog similar to ",(0,s.jsx)(i.a,{href:"https://github.com/cocogitto/cocogitto/blob/main/CHANGELOG.md",children:"cocogitto's format"}),"."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.a,{href:"https://github.com/orhun/git-cliff/tree/main/examples/unconventional.toml",children:(0,s.jsx)(i.code,{children:"unconventional.toml"})}),": changelog for unconventional commits."]}),"\n"]}),"\n",(0,s.jsx)(i.hr,{}),"\n",(0,s.jsx)(i.h3,{id:"-footer-template",children:"\ud83d\udcc4 Footer Template"}),"\n",(0,s.jsxs)(i.p,{children:["Now you can use a template in ",(0,s.jsx)(i.code,{children:"[changelog.footer]"})," as well!"]}),"\n",(0,s.jsx)(i.p,{children:"Before:"}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-toml",children:'# changelog footer\nfooter = """\n\x3c!-- generated by git-cliff --\x3e\n"""\n'})}),"\n",(0,s.jsx)(i.p,{children:"After:"}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-toml",children:'# template for the changelog footer\nfooter = """\n\x3c!-- generated by git-cliff at {{ now() | date(format="%Y-%m-%d") }} --\x3e\n"""\n'})}),"\n",(0,s.jsxs)(i.p,{children:["For example, ",(0,s.jsx)(i.a,{href:"https://github.com/orhun/git-cliff/tree/main/examples/keepachangelog.toml",children:(0,s.jsx)(i.code,{children:"keepachangelog.toml"})})," uses this for adding links to the end of the changelog."]}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-toml",children:'# template for the changelog footer\nfooter = """\n{% for release in releases -%}\n    {% if release.version -%}\n        {% if release.previous.version -%}\n            [{{ release.version | trim_start_matches(pat="v") }}]: \\\n                https://github.com/{{ remote.github.owner }}/{{ remote.github.repo }}\\\n                    /compare/{{ release.previous.version }}..{{ release.version }}\n        {% endif -%}\n    {% else -%}\n        [unreleased]: https://github.com/{{ remote.github.owner }}/{{ remote.github.repo }}\\\n            /compare/{{ release.previous.version }}..HEAD\n    {% endif -%}\n{% endfor %}\n\x3c!-- generated by git-cliff --\x3e\n"""\n'})}),"\n",(0,s.jsx)(i.p,{children:"Results in:"}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-md",children:"[unreleased]: https://github.com/orhun/git-cliff/compare/v1.4.0..HEAD\n[1.4.0]: https://github.com/orhun/git-cliff/compare/v1.3.1..v1.4.0\n[1.3.1]: https://github.com/orhun/git-cliff/compare/v1.3.1-rc.0..v1.3.1\n[1.3.1-rc.0]: https://github.com/orhun/git-cliff/compare/v1.3.0..v1.3.1-rc.0\n"})}),"\n",(0,s.jsx)(i.hr,{}),"\n",(0,s.jsx)(i.h3,{id:"-improve-skipping",children:"\ud83e\uddf6 Improve Skipping"}),"\n",(0,s.jsx)(i.p,{children:"Do you want to skip erroneous commits in the changelog? We now support two comfortable ways of doing that."}),"\n",(0,s.jsxs)(i.h4,{id:"1-cliffignore",children:["1. ",(0,s.jsx)(i.code,{children:".cliffignore"})]}),"\n",(0,s.jsxs)(i.p,{children:["You can now add a ",(0,s.jsx)(i.code,{children:".cliffignore"})," file at the root of your repository for listing the commits that will be skipped:"]}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"# skip commits by their SHA1\n\n4f88dda8c746173ea59f920b7579b7f6c74bd6c8\n10c3194381f2cc4f93eb97404369568882ed8677\n"})}),"\n",(0,s.jsxs)(i.h4,{id:"2---skip-commit",children:["2. ",(0,s.jsx)(i.co
1de,{children:"--skip-commit"})]}),"\n",(0,s.jsx)(i.p,{children:"You can skip commits by using this argument as follows:"}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-sh",children:"$ git cliff --skip-commit 10c3194381f2cc4f93eb97404369568882ed8677 \\\n            --skip-commit 4f88dda8c746173ea59f920b7579b7f6c74bd6c8\n"})}),"\n",(0,s.jsx)(i.hr,{}),"\n",(0,s.jsx)(i.h3,{id:"\ufe0f-print-bumped-version",children:"\ud83d\udda8\ufe0f Print Bumped Version"}),"\n",(0,s.jsxs)(i.p,{children:["If you want to use the ",(0,s.jsx)(i.code,{children:"--bump"})," option but are only interested in the bumped version instead of the entire changelog, you can simply use the newly added ",(0,s.jsx)(i.code,{children:"--bumped-version"})," flag!"]}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-sh",children:"# print the next semantic version\n$ git cliff --bumped-version\n\nv2.0.0\n"})}),"\n",(0,s.jsx)(i.hr,{}),"\n",(0,s.jsx)(i.h3,{id:"-disable-command-execution",children:"\ud83d\udeab Disable Command Execution"}),"\n",(0,s.jsxs)(i.p,{children:["If you are using external commands (e.g. via ",(0,s.jsx)(i.code,{children:"replace_command"}),") in your configuration, you can now entirely skip executing those commands with ",(0,s.jsx)(i.code,{children:"--no-exec"})," flag."]}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-sh",children:"$ git cliff --no-exec\n"})}),"\n",(0,s.jsx)(i.p,{children:"For example, this is useful in the cases where the execution takes time."}),"\n",(0,s.jsx)(i.hr,{}),"\n",(0,s.jsx)(i.h3,{id:"-filter-merge-commits",children:"\ud83d\udd04 Filter Merge Commits"}),"\n",(0,s.jsxs)(i.p,{children:["The ",(0,s.jsx)(i.a,{href:"/docs/templating/context",children:"template context"})," has a new field called ",(0,s.jsx)(i.code,{children:"merge_commit"})," (bool) which can be used to filter out merge commits."]}),"\n",(0,s.jsxs)(i.p,{children:["For example, you can use ",(0,s.jsx)(i.code,{children:'filter(attribute="merge_commit", value=false)'})," as follows:"]}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-jinja2",children:'{% for group, commits in commits |\n  filter(attribute="merge_commit", value=false) |\n  group_by(attribute="group") %}\n    ### {{ group | upper_first }}\n    {% for commit in commits %}\n        - {{ commit.message | upper_first }}\\\n    {% endfor %}\n{% endfor %}\\n\n'})}),"\n",(0,s.jsx)(i.hr,{}),"\n",(0,s.jsx)(i.h3,{id:"-match-by-commit-sha",children:"\ud83d\udd0d Match by commit SHA"}),"\n",(0,s.jsxs)(i.p,{children:["It is now possible to use the SHA1 of a commit with ",(0,s.jsx)(i.a,{href:"/docs/configuration/git#commit_parsers",children:(0,s.jsx)(i.code,{children:"commit_parsers"})}),"."]}),"\n",(0,s.jsx)(i.p,{children:"For example, to skip a specific commit:"}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-toml",children:'commit_parsers = [\n    { sha = "f6f2472bdf0bbb5f9fcaf2d72c1fa9f98f772bb2", skip = true }\n]\n'})}),"\n",(0,s.jsx)(i.p,{children:"To override the group of a specific commit:"}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-toml",children:'commit_parsers = [\n    { sha = "f6f2472bdf0bbb5f9fcaf2d72c1fa9f98f772bb2", group = "Stuff" }\n]\n'})}),"\n",(0,s.jsx)(i.hr,{}),"\n",(0,s.jsx)(i.h3,{id:"-regex-scope-values",children:"\ud83d\udd20 Regex Scope Values"}),"\n",(0,s.jsxs)(i.p,{children:["It is now possible to use regex-replace for the ",(0,s.jsx)(i.code,{children:"scope"})," value in ",(0,s.jsx)(i.a,{href:"/docs/configuration/git#commit_parsers",children:(0,s.jsx)(i.code,{children:"commit_parsers"})}),":"]}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-toml",children:'[git]\n# regex for parsing and grouping commits\ncommit_parsers = [\n  { message = "^\\\\[(.*)\\\\]", group = "Changes to ${1}", scope = "${1}" },\n]\n'})}),"\n",(0,s.jsxs)(i.p,{children:["In this example, ",(0,s.jsx)(i.code,{children:"[codebase]: rewrite everything in Rust"})," will appear in the changelog as:"]}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-md",children:"### Changes to codebase\n\n- (codebase) Rewrite everything in Rust\n"})}),"\n",(0,s.jsx)(i.hr,{}),"\n",(0,s.jsx)(i.h3,{id:"-bump-improvements",children:"\ud83d\udcc8 Bump Improvements"}),"\n",(0,s.jsxs)(i.p,{children:["There was some love towards ",(0,s.jsx)(i.co
1de,{children:"--bump"})," flag to improve its behavior:"]}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["Tag prefixes are now supported!","\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["This means that for example if you have ",(0,s.jsx)(i.code,{children:"testing/v1.0.0-beta.1"})," as the current version and if you run ",(0,s.jsx)(i.code,{children:"git cliff --bump"}),", you will see ",(0,s.jsx)(i.code,{children:"testing/v1.0.0-beta.2"})," in your changelog."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["If no tags exist, ",(0,s.jsx)(i.code,{children:"--bump"})," will yield ",(0,s.jsx)(i.code,{children:"0.1.0"})," as default."]}),"\n",(0,s.jsx)(i.li,{children:"Other behavioral fixes!"}),"\n"]}),"\n",(0,s.jsx)(i.hr,{}),"\n",(0,s.jsx)(i.h3,{id:"-documentation-improvements",children:"\ud83d\udcda Documentation Improvements"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsxs)(i.p,{children:["Added ",(0,s.jsx)(i.a,{href:"/docs/tips-and-tricks",children:"Tips And Tricks"}),"!"]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsx)(i.p,{children:"Added installation instructions for Homebrew"}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"brew install git-cliff\n"})}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["Added ",(0,s.jsx)(i.a,{href:"https://github.com/orhun/git-cliff/tree/main/.github/fixtures#fixtures",children:"instructions"})," for adding new test fixtures"]}),"\n"]}),"\n",(0,s.jsx)(i.hr,{}),"\n",(0,s.jsx)(i.h3,{id:"-website-improvements",children:"\ud83c\udf10 Website Improvements"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"Made dark theme default (sorry moths)"}),"\n",(0,s.jsx)(i.li,{children:"Added a search bar"}),"\n"]}),"\n",(0,s.jsx)(i.hr,{}),"\n",(0,s.jsx)(i.h3,{id:"-other",children:"\ud83e\uddf0 Other"}),"\n",(0,s.jsx)(i.p,{children:"There were a lot of bug fixes and improvements in this release but mainly:"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.em,{children:"(changelog)"})," Fix previous version links (",(0,s.jsx)(i.a,{href:"https://github.com/orhun/git-cliff/issues/364",children:"#364"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.em,{children:"(cli)"})," Fix broken pipe when stdout is interrupted (",(0,s.jsx)(i.a,{href:"https://github.com/orhun/git-cliff/issues/407",children:"#407"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.em,{children:"(commit)"})," Trim the trailing newline from message (",(0,s.jsx)(i.a,{href:"https://github.com/orhun/git-cliff/issues/403",children:"#403"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.em,{children:"(git)"})," Sort commits in topological order (",(0,s.jsx)(i.a,{href:"https://github.com/orhun/git-cliff/issues/415",children:"#415"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.em,{children:"(args)"})," Set ",(0,s.jsx)(i.code,{children:"CHANGELOG.md"})," as default missing value for output option (",(0,s.jsx)(i.a,{href:"https://github.com/orhun/git-cliff/issues/354",children:"#354"}),")"]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.em,{children:"(changelog)"})," Disable the default behavior of next-version (",(0,s.jsx)(i.a,{href:"https://github.com/orhun/git-cliff/issues/343",children:"#343"}),")"]}),"\n"]}),"\n",(0,s.jsx)(i.hr,{}),"\n",(0,s.jsx)(i.h2,{id:"contributions-",children:"Contributions \ud83d\udc65"}),"\n",(0,s.jsxs)(i.p,{children:["Any contribution is highly appreciated! See the ",(0,s.jsx)(i.a,{href:"https://github.com/orhun/git-cliff/blob/main/CONTRIBUTING.md",children:"contribution guidelines"})," for getting started."]}),"\n",(0,s.jsxs)(i.p,{children:["Feel free to ",(0,s.jsx)(i.a,{href:"https://github.com/orhun/git-cliff/issues/new/choose",children:"submit issues"})," and join our ",(0,s.jsx)(i.a,{href:"https://discord.gg/W3mAwMDWH4",children:"Discord"})," / ",(0,s.jsx)(i.a,{href:"https://matrix.to/#/#git-cliff:matrix.org",children:"Matrix"})," for discussion!"]}
1),"\n",(0,s.jsxs)(i.p,{children:["Follow ",(0,s.jsx)(i.code,{children:"git-cliff"})," on ",(0,s.jsx)(i.a,{href:"https://twitter.com/git_cliff",children:"Twitter"})," & ",(0,s.jsx)(i.a,{href:"https://fosstodon.org/@git_cliff",children:"Mastodon"})," to not miss any news!"]}),"\n",(0,s.jsx)(i.h2,{id:"support-",children:"Support \ud83c\udf1f"}),"\n",(0,s.jsxs)(i.p,{children:["If you liked ",(0,s.jsx)(i.code,{children:"git-cliff"})," and/or my other projects ",(0,s.jsx)(i.a,{href:"https://github.com/orhun",children:"on GitHub"}),", consider ",(0,s.jsx)(i.a,{href:"https://donate.orhun.dev",children:"donating"})," to support my open source endeavors."]}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["\ud83d\udc96 GitHub Sponsors: ",(0,s.jsx)(i.a,{href:"https://github.com/sponsors/orhun",children:"@orhun"})]}),"\n",(0,s.jsxs)(i.li,{children:["\u2615 Buy Me A Coffee: ",(0,s.jsx)(i.a,{href:"https://www.buymeacoffee.com/orhun",children:"https://www.buymeacoffee.com/orhun"})]}),"\n"]}),"\n",(0,s.jsx)(i.p,{children:"Have a fantastic day! \u26f0\ufe0f"})]})}function d(e={}){const{wrapper:i}={...(0,r.R)(),...e.components};return i?(0,s.jsx)(i,{...e,children:(0,s.jsx)(a,{...e})}):a(e)}},8453:(e,i,n)=>{n.d(i,{R:()=>o,x:()=>l});var t=n(6540);const s={},r=t.createContext(s);function o(e){const i=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function l(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),t.createElement(r.Provider,{value:i},e.children)}},8703:e=>{e.exports=JSON.parse('{"permalink":"/blog/2.0.0","editUrl":"https://github.com/orhun/git-cliff/tree/main/website/blog/git-cliff-2.0.0.md","source":"@site/blog/git-cliff-2.0.0.md","title":"What\'s new in 2.0.0?","description":"git-cliff is a command-line tool (written in Rust) that provides a highly customizable way to generate changelogs from git history.","date":"2024-02-19T00:00:00.000Z","tags":[{"inline":true,"label":"release","permalink":"/blog/tags/release"}],"readingTime":6.92,"hasTruncateMarker":false,"authors":[{"name":"Orhun Parmaks\u0131z","title":"Author of git-cliff","url":"https://github.com/orhun","imageURL":"https://github.com/orhun.png","key":"orhun","page":null}],"frontMatter":{"slug":"2.0.0","title":"What\'s new in 2.0.0?","date":"2024-02-19T00:00:00.000Z","authors":"orhun","tags":["release"]},"unlisted":false,"prevItem":{"title":"What\'s new in 2.2.0?","permalink":"/blog/2.2.0"},"nextItem":{"title":"What\'s new in 1.4.0?","permalink":"/blog/1.4.0"}}')}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.