In: computer, software.

Version control

Version control (also known as revision control, source control, or source code management) is a class of systems responsible for managing changes to computer programs, documents, large web sites, or other collections of information.

The concept of backing up your “data” iteratively, so you can roll-back to specific versions as needed is very old. At the most basic level, version control could be achieved by making a “.zip” file backup of your data every day.

Applications

Git

Git is by far the most popular version control app today. It’s not the only one.
Also, Git != Github. Git is the application. Github.com is a website that hosts code and allows developers to work together on code (and it happens to use Git). Github is NOT the only website that hosts Git code.

Snippets that I keep forgetting how to do:

## To clone a massive repo:
git clone --no-tags --depth 1 <repoURI>
git fetch --unshallow
## Alternativ, just one folder/ file:
git clone --filter=tree:0 --depth 1 repoURI repoDIR
cd repoDIR
git sparse-checkout set --no-cone someFOLDER
git checkout

To convert a repo to shallow:
https://stackoverflow.com/questions/4698759/converting-git-repository-to-shallow

git pull --depth 1
git gc --prune=all
## Convert a repo to shallow since a specific date:
git pull --shallow-since=YYYY-mm-dd
git gc --prune=all
## To cancel a git merge:
git reset --merge  &&  git merge --abort
## To reset a file to be identical to the master branch:
git checkout master -- some/path/file
## To view one commit, details + file names, no patch:
git show deadbeef… -format=fuller -name-only
## To view the diffs/changes of only 1 file:
git log -p some/path/file
## To filter changes of one file with pickaxe:
git log -S'Foo' --since=2020.1.1 --until=2024.1.1 -- some/path/file
## To filter changes of one file with -G search:
git log -G'Foo' --name-status -- some/folder/
## To change the author of ALL commits:
git filter-branch -f --env-filter "
GITAUTHORNAME='New name'
GITAUTHOREMAIL='new@email'
GITCOMMITTERNAME='New name'
GITCOMMITTEREMAIL='new@email'
" HEAD

To remove files from a commit:
https://stackoverflow.com/a/15321456/498361

> git reset --soft HEAD^
> git reset HEAD path/to/unwantedfile
> git commit …

## To undo a local commit (not pushed):
> git reset --soft HEAD~
## Undo a commit local & remote:
> git reset --hard HEAD~

To remove a commit:
https://itechcode.com/2020/09/22/how-to-remove-a-commit-in-git

git reset HEAD~1
git rebase --interactive origin somebranch

How to restore a deleted tag:
https://baptiste-wicht.com/posts/2011/06/git-tip-restore-a-deleted-tag.html

git fsck --unreachable | grep tag
git show ID
git update-ref refs/tags/TAGNAME ID

Cleaning up Git history:
https://blog.sulami.xyz/posts/cleaning-up-git-history

Conditional Git config:
https://utf9k.net/blog/conditional-gitconfig

Setup different authors per repo, setup multiple authors per commit:
https://advancedweb.hu/3-ways-to-set-up-author-information-in-git

Forking and maintaining a fork:
https://docs.github.com/en/get-started/quickstart/fork-a-repo
https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/syncing-a-fork

## Hard reset, completely replace fork master with upstream master
git fetch upstream
git reset --hard upstream/master

Links

×