Table of Contents

[2020-04-19] The Communicative Value of Using Git Well – Math ∩ Programming [[git]]

[2017-05-06] use hg-fast-export to convert [[mercurial]] [[git]]

[2016-09-07] git stores snapshots, not diffs [[git]]

Different from SVN
It is important to note that this is very different from most SCM systems that you may be familiar with. Subversion, CVS, Perforce, Mercurial and the like all use Delta Storage systems - they store the differences between one commit and the next.
Git does not do this - it stores a snapshot of what all the files in your project look like in this tree structure each time you commit. This is a very important concept to understand when using Git.
Git’s pack files are carefully constructed to effectively use disk caches and provide “nice” access patterns for common commands and for reading recently referenced objects.

NOCOMMIT global hook? [[git]]

[2019-08-18] Highlights from Git 2.23 - The GitHub Blog [[git]]

You may have used git grep to search for some text in your Git project, just as you may have used git diff to view active changes. What do the two have in common? They both display some contents in your repository, and both have support to show the surrounding function context with -p (short for --show-function) or -W (short for --function-context), respectively.

Git blame ignore formatting [[git]]

Configure your git blame to ignore cleanup changes.

[2019-08-24] Fossil Versus Git | Lobsters [[git]]

This article is getting a few things about git wrong. They claim git only supports ‘One check-out per repository’. Heard of git worktree?

My unorthodox, branchless git workflow | Lobsters [[git]]

Git revise is especially useful for this commit stack workflow, as I call it. I’m a huge fan.

It’s a better rebase. So much better that it should be obligatory. You can split commits, batch rename them, and you don’t have to stash your work first.

a page with my favourite git commands & tricks? [[git]] [[toblog]] [[exobrain]]

image diff
extra worktree dir

The Communicative Value of Using Git Well – Math ∩ Programming [[git]]

I’ve written up my ideas, under the name ‘Literate Git’, at if you’re interested.
The tool I wrote turns a structured git history into an interactive web page.
There’s an example there of how the ideas might work in a tutorial setting.
After I gave a talk on this work, one of the people in the audience tried it with the Haskell LLVM tutorial:

[2019-08-02] git - How do I remove a submodule? - Stack Overflow [[git]]

git rm the_submodule
rm -rf .git/modules/the_submodule

[2019-12-11] git reflog expire –expire=now –all && git gc –prune=now –aggressive [[github]]

[2019-05-10] git rebase –committer-date-is-author-date –autostash HEAD~1 [[git]]

[2020-06-08] Learn to change history with git rebase!

[2018-11-28] extraction - How to extract one file with commit history from a git repo with index-filter & co - Stack Overflow [[git]]

git filter-branch --index-filter 'git read-tree --empty; git reset $GIT_COMMIT -- $your $files $here' -- --all --

[2019-04-10] set up git project commmand

[2020-07-12] - GitHub + why do we centralize issues, documents for a distributed version… | Hacker News

for an academic treatment of the defects in Git read: What's Wrong with Git? A Conceptual Design Analysis S. Perez De Rosso and D. Jackson. In Proceedings of the 2013 ACM International Symposium on New Ideas, New Paradigms, and Reflections on Programming & Software (Onward! 2013) 

[2018-01-01] detect file type changes [[git]]

for r in *; do pushd $r; git whatchanged | grep "\.\.\..T"; popd; done

git ssh debugging [[git]] [[ssh]]

GIT_SSH_COMMAND='ssh -v' git fetch

[2021-01-11] How to keep your Git history clean with interactive rebase | GitLab

[2020-11-16] Why Git blame sucks for understanding WTF code (and what you should use instead) | Lobsters

For archeology I really love git gui blame despite its dated UI

[2019-07-21] git - How do I remove a submodule? - Stack Overflow [[git]]

he majority of answers to this question are outdated, incomplete, or unnecessarily complex.

A submodule cloned using git 1.7.8 or newer will leave at most four traces of itself in your local repo. The process for removing those four traces is given by the three commands below: