Hi Elijah, On Wed, 28 Aug 2019, Elijah Newren wrote: > Hi Sergey, > > On Wed, Aug 28, 2019 at 1:52 AM Sergey Organov <sorganov@xxxxxxxxx> wrote: > > > > Elijah Newren <newren@xxxxxxxxx> writes: > > > > > On Tue, Aug 27, 2019 at 1:43 AM Sergey Organov <sorganov@xxxxxxxxx> wrote: > > >> > > >> Eric Wong <e@xxxxxxxxx> writes: > > >> > > >> > > >> [...] > > >> > > >> > AFAIK, filter-branch is not causing support headaches for any > > >> > git developers today. With so many commands in git, it's > > >> > unlikely newbies will ever get around to discover it :) > > >> > So I think think we should be in any rush to remove it. > > >> > > >> Nah, discovering it is simple. Just Google for "git change author". That > > >> eventually leads to a script that uses "git filter-branch --env-filter" > > >> to get the job done, and I'm afraid it is spread all over the world. > > >> > > >> See, e.g.: > > >> > > >> https://help.github.com/en/articles/changing-author-info > > > > > > Side note: Is the goal to "fix names and email addresses in this > > > repository"? If so, this guide fails: it doesn't update tagger names > > > or email addresses. Indeed, filter-branch doesn't provide a way to do > > > that. (Not to mention other problems like not updating references to > > > commit hashes in commit messages when it busy rewriting everything.) > > > > No. Maybe the original goal was like that, by I, personally, use > > modified version of this to change my "Author" credentials from > > "internal" to "public" in branches that I'm going to send upstream, so > > the actual aim is to change e-mail of particular Author from a@b to c@d > > in all the commits in a (feature) branch. > > There's an interesting usecase I hadn't heard of or thought of before. I'll throw in another use case that's kinda related: extracting the history of one file (or subdirectory). In my most recent instance of this, I wanted to publish the script I used to use for submitting patch series to the Git mailing list, maintaining tags for iterations and generating cover letters from branch descriptions and interdiffs (this script eventually became GitGitGadget, https://github.com/gitgitgadget/gitgitgadget/commits?after=6fb0ede48f86e729292ee1542729bc0f5a30cfa6+0 demonstrates this). To do that, I ran a `git filter-branch` in the repository where I track all the scripts I deem unsuitable for public consumption, to remove all files but `mail-patch-series.sh`, then pushed it to https://github.com/dscho/mail-patch-series Please note that most crucially, I wanted to rewrite a newly-created branch, and only that branch. Could I have done the same using `git fast-export`, filtering the output with a Perl script, then passing it to `git fast-import`? Sure, I was really tempted to do that. In the end, it took less of _my_ time to just let `git filter-branch` do its work with a not-too-complicated index filter. In another instance, a long, long time ago, I needed to restart a repository which had included way too many files for its own good, then rename the old repository and start with a fresh `master` that contained but a single commit whose tree was identical to the previous `master`'s tip commit. I simply grafted that commit, ran `git filter-branch` and had precisely what I needed. I would be _delighted_ if these kinds of use case (rewriting a branch, or even just a commit range) became more of a first-class citizen with `git filter-repo`. Thanks, Dscho