git

init submodules#

bash
git submodule update --init --recursive

adding keys#

bash
sudo apt-get install keychain ssh-keygen -t ed25519 -C "stafford.williams@gmail.com"

linux:

bash
echo "eval \`keychain --clear --eval id_ed25519\`" >> ~/.profile cat ~/.ssh/id_ed25519.pub

macOS: see docs

integrate beyond compare#

bash
# diff git config --global diff.tool bc3 # merge git config --global merge.tool bc3 git config --global mergetool.bc3.trustExitCode true

find your missing commit#

undefined
git reflog

commit messages#

A note about git commit messages

set user and email#

bash
git config --global user.name "Stafford Williams" git config --global user.email "stafford.williams@gmail.com" git config --global core.editor "vim"

reviewing a merge commit locally#

bash
git config --add remote.origin.fetch +refs/pull/*/merge:refs/remotes/origin/pr/* git fetch origin git checkout pr/1234

More on richard-banks.org

integrate beyond compare in wsl#

Inside ~/.gitconfig:

ini
[diff] tool = bcomp [difftool] prompt = false [difftool "bcomp"] path = "/mnt/c/Program\\ Files/Beyond\\ Compare\\ 4/BCompare.exe" cmd = "/mnt/c/Program\\ Files/Beyond\\ Compare\\ 4/BCompare.exe" "$(wslpath -aw $LOCAL)" "$(wslpath -aw $REMOTE)" [merge] tool = bcomp [mergetool] prompt = false [mergetool "bcomp"] path = "/mnt/c/Program\\ Files/Beyond\\ Compare\\ 4/BCompare.exe" cmd = "/mnt/c/Program\\ Files/Beyond\\ Compare\\ 4/BCompare.exe" "$(wslpath -aw $LOCAL)" "$(wslpath -aw $REMOTE)" "$(wslpath -aw $BASE)" "$(wslpath -aw $MERGED)"

list contributors#

css
git shortlog -s -n --no-merges

set upstream branch automatically#

bash
git config --global push.default current

Now you can git push a new branch without needing to git push -u some-branch

aliases#

shell
git config --global alias.co checkout git config --global alias.branches "branch --sort=-committerdate"

updating#

ubuntu#

bash
sudo add-apt-repository ppa:git-core/ppa sudo apt update sudo apt-get install git

windows#

powershell
git update-git-for-windows

macOS#

shell
brew install git

configure windows ssh#

  1. Set service OpenSSH Authentication Agent to Automatic and Start it.
  2. In Powershell, ssh-add
  3. In environment variables, add GIT_SSH=C:\Windows\System32\OpenSSH\ssh.exe

See more

backup github repos#

Backup personal github repos

shell
docker run -it -v ${PWD}:/out python:3 bash pip install git+https://github.com/clockfort/GitHub-Backup chmod +x /usr/local/lib/python3.11/site-packages/github_backup/github_backup.py /usr/local/lib/python3.11/site-packages/github_backup/github_backup.py staff0rd /out/backup -p YOUR_PAT -t http

More info

find an edited file in any commit or stash#

made changes a to a file but don’t know the branch or stash?

find it across all branches:

bash
git reflog -- {path-to-file}

find it in the stash:

bash
git reflog stash -- {path-to-file}