{"id":13739119,"url":"https://github.com/nickolasburr/git-follow","last_synced_at":"2026-02-07T19:19:46.433Z","repository":{"id":105458654,"uuid":"83103948","full_name":"nickolasburr/git-follow","owner":"nickolasburr","description":"Follow lifetime changes of a pathspec in Git.","archived":false,"fork":false,"pushed_at":"2023-06-20T22:32:33.000Z","size":342,"stargazers_count":31,"open_issues_count":2,"forks_count":4,"subscribers_count":5,"default_branch":"master","last_synced_at":"2024-11-15T09:42:40.875Z","etag":null,"topics":["diff","git","git-diff","git-log","patch","stat"],"latest_commit_sha":null,"homepage":"","language":"Perl","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nickolasburr.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2017-02-25T03:45:28.000Z","updated_at":"2024-04-27T13:55:24.000Z","dependencies_parsed_at":"2023-07-02T18:16:22.934Z","dependency_job_id":null,"html_url":"https://github.com/nickolasburr/git-follow","commit_stats":null,"previous_names":[],"tags_count":11,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nickolasburr%2Fgit-follow","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nickolasburr%2Fgit-follow/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nickolasburr%2Fgit-follow/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nickolasburr%2Fgit-follow/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nickolasburr","download_url":"https://codeload.github.com/nickolasburr/git-follow/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253127101,"owners_count":21858193,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["diff","git","git-diff","git-log","patch","stat"],"created_at":"2024-08-03T04:00:25.558Z","updated_at":"2026-02-07T19:19:46.381Z","avatar_url":"https://github.com/nickolasburr.png","language":"Perl","funding_links":[],"categories":["Tools"],"sub_categories":["Comparing workflows"],"readme":"git-follow(1)\n=============\n\n``git-follow`` follows lifetime changes of a pathspec in Git, providing a simplified log and diff.\n\n.. contents::\n    :local:\n\nInstallation\n------------\n\nYou can install ``git-follow`` via Homebrew or manually.\n\nHomebrew\n^^^^^^^^\n\n.. code-block:: sh\n\n   brew tap nickolasburr/pfa\n   brew install git-follow\n\nManual\n^^^^^^\n\n.. code-block:: sh\n\n   git clone https://github.com/nickolasburr/git-follow.git\n   cd git-follow\n   make\n   make install\n\nBy default, files are installed to ``/usr/local``. You can install elsewhere by passing ``PREFIX`` to ``make install``.\n\n.. code-block:: sh\n\n   make install PREFIX=\"$HOME/.usr/local\"\n\nConfiguration\n-------------\n\ngit-config(1) settings can be used to customize the behavior of git-follow.\n\n.. raw:: html\n\n   \u003cblockquote\u003e\n        \u003ctable frame=\"void\" rules=\"none\"\u003e\n            \u003cthead\u003e\n                \u003ctr\u003e\n                    \u003cth\u003eConfiguration\u003c/th\u003e\n                    \u003cth\u003eDescription\u003c/th\u003e\n                    \u003cth\u003eSettings\u003c/th\u003e\n                    \u003cth\u003eDefault\u003c/th\u003e\n                \u003c/tr\u003e\n            \u003c/thead\u003e\n            \u003ctbody valign=\"top\"\u003e\n                \u003ctr\u003e\n                    \u003ctd\u003e\n                        \u003ckbd\u003e\n                            \u003cspan\u003efollow.diff.mode\u003c/span\u003e\n                        \u003c/kbd\u003e\n                    \u003c/td\u003e\n                    \u003ctd\u003e\n                        \u003cdiv\u003e\n                            \u003cspan\u003eDiff mode to use with git-diff(1), git-log(1), git-show(1), etc.\u003c/span\u003e\n                        \u003c/div\u003e\n                        \u003cdiv\u003e\n                            \u003cspan\u003eSee \u003ca href=\"https://git-scm.com/docs/git-log#Documentation/git-log.txt---word-diffltmodegt\"\u003e\u003cvar\u003e--word-diff\u003c/var\u003e\u003c/a\u003e of git-log(1).\u003c/span\u003e\n                        \u003c/div\u003e\n                    \u003c/td\u003e\n                    \u003ctd\u003e\n                        \u003cdiv\u003e\n                            \u003ccode\u003einline\u003c/code\u003e\n                        \u003c/div\u003e\n                        \u003cdiv\u003e\n                            \u003ccode\u003esxs\u003c/code\u003e\n                        \u003c/div\u003e\n                        \u003cdiv\u003e\n                            \u003ccode\u003ecolorsxs\u003c/code\u003e\n                        \u003c/div\u003e\n                    \u003c/td\u003e\n                    \u003ctd\u003e\n                        \u003cdiv\u003e\n                            \u003ccode\u003einline\u003c/code\u003e\n                        \u003c/div\u003e\n                    \u003c/td\u003e\n                \u003c/tr\u003e\n                \u003ctr\u003e\n                    \u003ctd\u003e\n                        \u003ckbd\u003e\n                            \u003cspan\u003efollow.log.format\u003c/span\u003e\n                        \u003c/kbd\u003e\n                    \u003c/td\u003e\n                    \u003ctd\u003e\n                        \u003cdiv\u003e\n                            \u003cspan\u003eLog format to use with git-log(1).\u003c/span\u003e\n                        \u003c/div\u003e\n                        \u003cdiv\u003e\n                            \u003cspan\u003eSee \u003ca href=\"https://git-scm.com/docs/git-log#Documentation/git-log.txt---formatltformatgt\"\u003e\u003cvar\u003e--format\u003c/var\u003e\u003c/a\u003e of git-log(1) for syntax.\u003c/span\u003e\n                        \u003c/div\u003e\n                    \u003c/td\u003e\n                    \u003ctd\u003e\n                        \u003cdiv\u003e\n                            \u003cspan\u003e-\u003c/span\u003e\n                        \u003c/div\u003e\n                    \u003c/td\u003e\n                    \u003ctd\u003e\n                        \u003cdiv\u003e\n                            \u003cspan\u003e-\u003c/span\u003e\n                        \u003c/div\u003e\n                    \u003c/td\u003e\n                \u003c/tr\u003e\n                \u003ctr\u003e\n                    \u003ctd\u003e\n                        \u003ckbd\u003e\n                            \u003cspan\u003efollow.pager.disable\u003c/span\u003e\n                        \u003c/kbd\u003e\n                    \u003c/td\u003e\n                    \u003ctd\u003e\n                        \u003cdiv\u003e\n                            \u003cspan\u003eDisable pager used with git-diff(1), git-log(1), git-show(1), etc.\u003c/span\u003e\n                        \u003c/div\u003e\n                        \u003cdiv\u003e\n                            \u003cspan\u003eSee \u003ca href=\"https://git-scm.com/docs/git#Documentation/git.txt---no-pager\"\u003e\u003cvar\u003e--no-pager\u003c/var\u003e\u003c/a\u003e of git(1).\u003c/span\u003e\n                        \u003c/div\u003e\n                    \u003c/td\u003e\n                    \u003ctd\u003e\n                        \u003cdiv\u003e\n                            \u003ccode\u003etrue\u003c/code\u003e\n                        \u003c/div\u003e\n                        \u003cdiv\u003e\n                            \u003ccode\u003efalse\u003c/code\u003e\n                        \u003c/div\u003e\n                    \u003c/td\u003e\n                    \u003ctd\u003e\n                        \u003cdiv\u003e\n                            \u003ccode\u003efalse\u003c/code\u003e\n                        \u003c/div\u003e\n                    \u003c/td\u003e\n                \u003c/tr\u003e\n            \u003c/tbody\u003e\n        \u003c/table\u003e\n   \u003c/blockquote\u003e\n\nOptions\n-------\n\nOptions can be specified to provide more refined information. If no options are given, all applicable commits will be shown.\n\n.. raw:: html\n\n    \u003cblockquote\u003e\n        \u003ctable frame=\"void\" rules=\"none\"\u003e\n            \u003ctbody valign=\"top\"\u003e\n                \u003ctr\u003e\n                    \u003ctd\u003e\n                        \u003ckbd\u003e\n                            \u003cspan\u003e-b, --branch \u003cvar\u003eBRANCH\u003c/var\u003e\u003c/span\u003e\n                        \u003c/kbd\u003e\n                    \u003c/td\u003e\n                    \u003ctd\u003e\n                        \u003cdiv\u003e\n                            \u003cspan\u003eShow commits for \u003cvar\u003eBRANCH\u003c/var\u003e\u003c/span\u003e\n                        \u003c/div\u003e\n                    \u003c/td\u003e\n                \u003c/tr\u003e\n                \u003ctr\u003e\n                    \u003ctd\u003e\n                        \u003ckbd\u003e\n                            \u003cspan\u003e-f, --first\u003c/span\u003e\n                        \u003c/kbd\u003e\n                    \u003c/td\u003e\n                    \u003ctd\u003e\n                        \u003cdiv\u003e\n                            \u003cspan\u003eShow first commit where Git initiated tracking of pathspec.\u003c/span\u003e\n                        \u003c/div\u003e\n                    \u003c/td\u003e\n                \u003c/tr\u003e\n                \u003ctr\u003e\n                    \u003ctd\u003e\n                        \u003ckbd\u003e\n                            \u003cspan\u003e-F, --func \u003cvar\u003eFUNCNAME\u003c/var\u003e\u003c/span\u003e\n                        \u003c/kbd\u003e\n                    \u003c/td\u003e\n                    \u003ctd\u003e\n                        \u003cdiv\u003e\n                            \u003cspan\u003eShow commits for function \u003cvar\u003eFUNCNAME\u003c/var\u003e.\u003c/span\u003e\n                        \u003c/div\u003e\n                        \u003cdiv\u003e\n                            \u003cspan\u003eSee \u003ca href=\"https://git-scm.com/docs/git-log#git-log--Lltfuncnamegtltfilegt\"\u003e\u003cvar\u003e-L\u003c/var\u003e\u003c/a\u003e of git-log(1).\u003c/span\u003e\n                        \u003c/div\u003e\n                    \u003c/td\u003e\n                \u003c/tr\u003e\n                \u003ctr\u003e\n                    \u003ctd\u003e\n                        \u003ckbd\u003e\n                            \u003cspan\u003e-l, --last \u003cvar\u003eCOUNT\u003c/var\u003e\u003c/span\u003e\n                        \u003c/kbd\u003e\n                    \u003c/td\u003e\n                    \u003ctd\u003e\n                        \u003cdiv\u003e\n                            \u003cspan\u003eShow last \u003cvar\u003eCOUNT\u003c/var\u003e commits for pathspec.\u003c/span\u003e\n                        \u003c/div\u003e\n                        \u003cdiv\u003e\n                            \u003cspan\u003eOmit \u003cvar\u003eCOUNT\u003c/var\u003e defaults to last commit.\u003c/span\u003e\n                        \u003c/div\u003e\n                    \u003c/td\u003e\n                \u003c/tr\u003e\n                \u003ctr\u003e\n                    \u003ctd\u003e\n                        \u003ckbd\u003e\n                            \u003cspan\u003e-L, --lines \u003cvar\u003eX[,Y]\u003c/var\u003e\u003c/span\u003e\n                        \u003c/kbd\u003e\n                    \u003c/td\u003e\n                    \u003ctd\u003e\n                        \u003cdiv\u003e\n                            \u003cspan\u003eShow commits for lines \u003cvar\u003eX\u003c/var\u003e through \u003cvar\u003eY\u003c/var\u003e.\u003c/span\u003e\n                        \u003c/div\u003e\n                        \u003cdiv\u003e\n                            \u003cspan\u003eOmit \u003cvar\u003eY\u003c/var\u003e defaults to \u003cvar\u003eEOF\u003c/var\u003e.\u003c/span\u003e\n                        \u003c/div\u003e\n                    \u003c/td\u003e\n                \u003c/tr\u003e\n                \u003ctr\u003e\n                    \u003ctd\u003e\n                        \u003ckbd\u003e\n                            \u003cspan\u003e-M, --no-merges\u003c/span\u003e\n                        \u003c/kbd\u003e\n                    \u003c/td\u003e\n                    \u003ctd\u003e\n                        \u003cdiv\u003e\n                            \u003cspan\u003eShow commits which have a maximum of one parent.\u003c/span\u003e\n                        \u003c/div\u003e\n                        \u003cdiv\u003e\n                            \u003cspan\u003eSee \u003ca href=\"https://git-scm.com/docs/git-log#git-log---no-merges\"\u003e\u003cvar\u003e--no-merges\u003c/var\u003e\u003c/a\u003e of git-log(1).\u003c/span\u003e\n                        \u003c/div\u003e\n                    \u003c/td\u003e\n                \u003c/tr\u003e\n                \u003ctr\u003e\n                    \u003ctd\u003e\n                        \u003ckbd\u003e\n                            \u003cspan\u003e-N, --no-patch\u003c/span\u003e\n                        \u003c/kbd\u003e\n                    \u003c/td\u003e\n                    \u003ctd\u003e\n                        \u003cdiv\u003e\n                            \u003cspan\u003eSuppress diff output.\u003c/span\u003e\n                        \u003c/div\u003e\n                        \u003cdiv\u003e\n                            \u003cspan\u003eSee \u003ca href=\"https://git-scm.com/docs/git-log#git-log---no-patch\"\u003e\u003cvar\u003e--no-patch\u003c/var\u003e\u003c/a\u003e of git-log(1).\u003c/span\u003e\n                        \u003c/div\u003e\n                    \u003c/td\u003e\n                \u003c/tr\u003e\n                \u003ctr\u003e\n                    \u003ctd\u003e\n                        \u003ckbd\u003e\n                            \u003cspan\u003e-O, --no-renames\u003c/span\u003e\n                        \u003c/kbd\u003e\n                    \u003c/td\u003e\n                    \u003ctd\u003e\n                        \u003cdiv\u003e\n                            \u003cspan\u003eDisable rename detection.\u003c/span\u003e\n                        \u003c/div\u003e\n                        \u003cdiv\u003e\n                            \u003cspan\u003eSee \u003ca href=\"https://git-scm.com/docs/git-log#git-log---no-renames\"\u003e\u003cvar\u003e--no-renames\u003c/var\u003e\u003c/a\u003e of git-log(1).\u003c/span\u003e\n                        \u003c/div\u003e\n                    \u003c/td\u003e\n                \u003c/tr\u003e\n                \u003ctr\u003e\n                    \u003ctd\u003e\n                        \u003ckbd\u003e\n                            \u003cspan\u003e-p, --pager\u003c/span\u003e\n                        \u003c/kbd\u003e\n                    \u003c/td\u003e\n                    \u003ctd\u003e\n                        \u003cdiv\u003e\n                            \u003cspan\u003eForce pager when invoking git-log(1).\u003c/span\u003e\n                        \u003c/div\u003e\n                        \u003cdiv\u003e\n                            \u003cspan\u003eOverrides \u003cvar\u003efollow.pager.disable\u003c/var\u003e config value.\u003c/span\u003e\n                        \u003c/div\u003e\n                    \u003c/td\u003e\n                \u003c/tr\u003e\n                \u003ctr\u003e\n                    \u003ctd\u003e\n                        \u003ckbd\u003e\n                            \u003cspan\u003e-P, --pickaxe \u003cvar\u003eSTRING\u003c/var\u003e\u003c/span\u003e\n                        \u003c/kbd\u003e\n                    \u003c/td\u003e\n                    \u003ctd\u003e\n                        \u003cdiv\u003e\n                            \u003cspan\u003eShow commits which change the frequency of \u003cvar\u003eSTRING\u003c/var\u003e in revision history.\u003c/span\u003e\n                        \u003c/div\u003e\n                        \u003cdiv\u003e\n                            \u003cspan\u003eSee \u003ca href=\"https://git-scm.com/docs/git-log#Documentation/git-log.txt--Sltstringgt\"\u003e\u003cvar\u003e-S\u003c/var\u003e\u003c/a\u003e of git-log(1).\u003c/span\u003e\n                        \u003c/div\u003e\n                    \u003c/td\u003e\n                \u003c/tr\u003e\n                \u003ctr\u003e\n                    \u003ctd\u003e\n                        \u003ckbd\u003e\n                            \u003cspan\u003e-r, --range \u003cvar\u003eX[,Y]\u003c/var\u003e\u003c/span\u003e\n                        \u003c/kbd\u003e\n                    \u003c/td\u003e\n                    \u003ctd\u003e\n                        \u003cdiv\u003e\n                            \u003cspan\u003eShow commits in range \u003cvar\u003eX\u003c/var\u003e through \u003cvar\u003eY\u003c/var\u003e.\u003c/span\u003e\n                        \u003c/div\u003e\n                        \u003cdiv\u003e\n                            \u003cspan\u003eOmit \u003cvar\u003eY\u003c/var\u003e defaults to \u003cvar\u003eHEAD\u003c/var\u003e.\u003c/span\u003e\n                        \u003c/div\u003e\n                    \u003c/td\u003e\n                \u003c/tr\u003e\n                \u003ctr\u003e\n                    \u003ctd\u003e\n                        \u003ckbd\u003e\n                            \u003cspan\u003e-R, --reverse\u003c/span\u003e\n                        \u003c/kbd\u003e\n                    \u003c/td\u003e\n                    \u003ctd\u003e\n                        \u003cdiv\u003e\n                            \u003cspan\u003eShow commits in reverse chronological order.\u003c/span\u003e\n                        \u003c/div\u003e\n                        \u003cdiv\u003e\n                            \u003cspan\u003eSee \u003ca href=\"https://git-scm.com/docs/git-log#git-log---walk-reflogs\"\u003e\u003cvar\u003e--walk-reflogs\u003c/var\u003e\u003c/a\u003e of git-log(1).\u003c/span\u003e\n                        \u003c/div\u003e\n                    \u003c/td\u003e\n                \u003c/tr\u003e\n                \u003ctr\u003e\n                    \u003ctd\u003e\n                        \u003ckbd\u003e\n                            \u003cspan\u003e-t, --tag \u003cvar\u003eTAG\u003c/var\u003e\u003c/span\u003e\n                        \u003c/kbd\u003e\n                    \u003c/td\u003e\n                    \u003ctd\u003e\n                        \u003cdiv\u003e\n                            \u003cspan\u003eShow commits specific to tag \u003cvar\u003eTAG\u003c/var\u003e.\u003c/span\u003e\n                        \u003c/div\u003e\n                    \u003c/td\u003e\n                \u003c/tr\u003e\n                \u003ctr\u003e\n                    \u003ctd\u003e\n                        \u003ckbd\u003e\n                            \u003cspan\u003e-T, --total\u003c/span\u003e\n                        \u003c/kbd\u003e\n                    \u003c/td\u003e\n                    \u003ctd\u003e\n                        \u003cdiv\u003e\n                            \u003cspan\u003eShow total number of commits for pathspec.\u003c/span\u003e\n                        \u003c/div\u003e\n                    \u003c/td\u003e\n                \u003c/tr\u003e\n                \u003ctr\u003e\n                    \u003ctd\u003e\n                        \u003ckbd\u003e\n                            \u003cspan\u003e-h, --help, --usage\u003c/span\u003e\n                        \u003c/kbd\u003e\n                    \u003c/td\u003e\n                    \u003ctd\u003e\n                        \u003cdiv\u003e\n                            \u003cspan\u003eShow usage information.\u003c/span\u003e\n                        \u003c/div\u003e\n                    \u003c/td\u003e\n                \u003c/tr\u003e\n                \u003ctr\u003e\n                    \u003ctd\u003e\n                        \u003ckbd\u003e\n                            \u003cspan\u003e-V, --version\u003c/span\u003e\n                        \u003c/kbd\u003e\n                    \u003c/td\u003e\n                    \u003ctd\u003e\n                        \u003cdiv\u003e\n                            \u003cspan\u003eShow current version number.\u003c/span\u003e\n                        \u003c/div\u003e\n                    \u003c/td\u003e\n                \u003c/tr\u003e\n            \u003c/tbody\u003e\n        \u003c/table\u003e\n    \u003c/blockquote\u003e\n\nNotes\n-----\n\nLike standard Git builtins, ``git-follow`` supports an optional pathspec delimiter ``--`` to help disambiguate options, option arguments, and refs from pathspecs.\n\nExamples\n--------\n\nDisplay commits on branch *topic* which affected *blame.c*\n\n.. code-block:: sh\n\n   git follow --branch topic -- blame.c\n\nDisplay first commit where Git initiated tracking of *branch.c*\n\n.. code-block:: sh\n\n   git follow --first -- branch.c\n\nDisplay last *5* commits which affected *column.c*\n\n.. code-block:: sh\n\n   git follow --last 5 -- column.c\n\nDisplay last commit where lines *5-\u003cEOF\u003e* were affected in *diff.c*\n\n.. code-block:: sh\n\n   git follow --last --lines 5 -- diff.c\n\nDisplay last *3* commits where lines *10-15* were affected in *bisect.c*\n\n.. code-block:: sh\n\n   git follow --last 3 --lines 10,15 -- bisect.c\n\nDisplay commits where function *funcname* was affected in *archive.c*\n\n.. code-block:: sh\n\n   git follow --func funcname -- archive.c\n\nDisplay commits in range from *aa03428* to *b354ef9* which affected *worktree.c*\n\n.. code-block:: sh\n\n   git follow --range aa03428,b354ef9 -- worktree.c\n\nDisplay commits in range from tag *v1.5.3* to tag *v1.5.4* which affected *apply.c*\n\n.. code-block:: sh\n\n   git follow --range v1.5.3,v1.5.4 -- apply.c\n\nDisplay commits up to tag *v1.5.3* which affected *graph.c*\n\n.. code-block:: sh\n\n   git follow --tag v1.5.3 -- graph.c\n\nDisplay total number of commits which affected *rebase.c*\n\n.. code-block:: sh\n\n   git follow --total -- rebase.c\n\nSee Also\n--------\n\n* `git(1) \u003chttps://git-scm.com/docs/git\u003e`_\n* `gitrevisions(1) \u003chttps://git-scm.com/docs/gitrevisions\u003e`_\n* `git-branch(1) \u003chttps://git-scm.com/docs/git-branch\u003e`_\n* `git-check-ref-format(1) \u003chttps://git-scm.com/docs/git-check-ref-format\u003e`_\n* `git-config(1) \u003chttps://git-scm.com/docs/git-config\u003e`_\n* `git-diff(1) \u003chttps://git-scm.com/docs/git-diff\u003e`_\n* `git-log(1) \u003chttps://git-scm.com/docs/git-log\u003e`_\n* `git-remote(1) \u003chttps://git-scm.com/docs/git-remote\u003e`_\n* `git-tag(1) \u003chttps://git-scm.com/docs/git-tag\u003e`_\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnickolasburr%2Fgit-follow","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnickolasburr%2Fgit-follow","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnickolasburr%2Fgit-follow/lists"}