https://git-scm.com/

Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.

I've been using Git for years now. Very comfortable with it. It's become a hammer for so many nails and a bunch of things that are probably actually screws. Super easy for me to manage piles of files, not only for software projects.

Git surgery is my mental tag for the more weird things I do with git commits as I work. I like to commit early and often and with garbage commit logs that track my work. Before submitting a pull request to the upstream project, I'll squash all those together and rework the commit log into something more useful long-term. In doing all that, I often move commits around, merge them, rebase them, slice them off the top of histories and transplant them manually with cherry pick.

I've seen disagreement with trying to keep git history clean. Trying to find references, some of which talk about how junior devs can be intimidated / overworked by it. I wrote this comment on a dev.to post Clean Git History is Kinda Overrated:

Clean git commits have come in handy for me over the years for any project that lasts more than a year, has more than 100 commits, is touched by more than 3 people.

Multiple times even just this past week, I've used history and blame (really unfortunate name, btw) on a work project to see when & why things happened in a particular file and who I can ask about it. Commits where unrelated changes are tangled or where a unit of related changes is spread across several commits make it harder to do that detective work months after the fact. Comments in code are great, but deleted comments tell no tales.