Rick's Dev Notes

Version 0.3.3

Dev notes you can use

Last updated on Mon, 04 Mar 2024 23:41 UTC

Git

Submodules

Pull submodules after clone

git submodule update --init

Command Tricks

If you need to trigger a new build on your CI/CD, you can create an empty commit.

git commit --allow-empty

If you screw up your local copy

git reset --hard <remote branch name>
git reset --hard origin/develop

Interactive Rebase

Don’t waste time mucking with git ammend; it’s messy and complicated. TODO: more info here If you forgot something and you already pushed up your changes, you can still fix your commit. You need to instead run your rebase on the remote branch and do a force push. That means first make your fix and push it. If you try to rebase with local commits, it will screw everything up because you’re not in sync and you’ll create weird merge commits. Then after your fix, just run rebase normally but on the remote branch.

git commit -m "fix I forgot to add before pushing"
git push
git rebase -i origin/branch_name~2 branch_name
git push origin +branch_name

Resolving Issues

Fetch Crashing

If on git fetch you encounter an error related to “early EOF fatal,” you can increase the amount of RAM git has access to by adding this to your $HOME/.gitconfig.

[core] 
	packedGitLimit = 512m 
	packedGitWindowSize = 512m 
[pack] 
	deltaCacheSize = 2047m 
	packSizeLimit = 2047m 
	windowMemory = 2047m

Another possibility is the “unable to update local ref” error. A simple fix is to try to prune.

git gc --prune=now

Trashing Broken Branch

In the event of a branch that can’t easily be recoverable, you can simply rename the bad branch, create a new one, then apply all changes to the new branch as unstaged changes. Then you can clean up the code and make a new commit. This unfortunately destroys the git history.

# rename locally
git branch -m feature_name feature_name_old

# delete original on remote
git push origin --delete feature_name

# unset upstream
git branch --unset-upstream feature_name_old

# push new branch name
git push origin feature_name_old

# set new upstream
git push origin -u feature_name_old

# checkout branch you want to branch from
git checkout develop

# might as well grab latest
git fetch
git pull

# recreate original branch name
git checkout -b feature_name

# copy over all changes as unstaged
git merge --no-commit --no-ff feature_name_old

Obsidian Setup

git config --global --add safe.directory C:/Users/rickd/Source/Repos/Obsidian

Windows-style backslashes will not work. If you run the above command by pasting the windows directory, you will need to edit the global .gitconfig file. It is in the user’s home directory. You can quickly open it with git config --global -e to fix the slashes.

Force GPG Login

echo "test" | gpg --clearsign

Gitflow

To review: https://jeffkreeftmeijer.com/git-flow/ https://nvie.com/posts/a-successful-git-branching-model/

Common Commands

Alias Command
g git
ga git add
gaa git add –all
gapa git add –patch
gau git add –update
gav git add –verbose
gap git apply
gapt git apply –3way
gb git branch
gba git branch –all
gbd git branch –delete
gbda git branch –no-color –merged | grep -vE “^([+]|\s($(git_main_branch)|$(git_develop_branch))\s*$)” | xargs git branch –delete 2>/dev/null
gbD git branch –delete –force
gbg git branch -vv
gbgd local res=$(git branch -vv
gbgD local res=$(git branch -vv
gbl git blame -b -w
gbnm git branch –no-merged
gbr git branch –remote
gbs git bisect
gbsb git bisect bad
gbsg git bisect good
gbsr git bisect reset
gbss git bisect start
gc git commit –verbose
gc! git commit –verbose –amend
gcn! git commit –verbose –no-edit –amend
gca git commit –verbose –all
gca! git commit –verbose –all –amend
gcan! git commit –verbose –all –no-edit –amend
gcans! git commit –verbose –all –signoff –no-edit –amend
gcam git commit –all –message
gcas git commit –all –signoff
gcasm git commit –all –signoff –message
gcsm git commit –signoff –message
gcb git checkout -b
gcf git config –list
gcl git clone –recurse-submodules
gccd git clone –recurse-submodules “$@” && cd “$(basename $_ .git)”
gclean git clean –interactive -d
gpristine git reset –hard && git clean -dffx
gcm git checkout $(git_main_branch)
gcd git checkout $(git_develop_branch)
gcmsg git commit –message
gco git checkout
gcor git checkout –recurse-submodules
gcount git shortlog –summary -n
gcp git cherry-pick
gcpa git cherry-pick –abort
gcpc git cherry-pick –continue
gcs git commit -S
gcss git commit -S -s
gcssm git commit -S -s -m
gd git diff
gdca git diff –cached
gdcw git diff –cached –word-diff
gdct git describe –tags $(git rev-list –tags –max-count=1)
gds git diff –staged
gdt git diff-tree –no-commit-id –name-only -r
gdnolock git diff $@ “:(exclude)package-lock.json” “:(exclude)*.lock”
gdup git diff @{upstream}
gdv git diff -w $@ | view -
gdw git diff –word-diff
gf git fetch
gfa git fetch –all –prune
gfg git ls-files | grep
gfo git fetch origin
gg git gui citool
gga git gui citool –amend
ggf git push –force origin $(current_branch)
ggfl git push –force-with-lease origin $(current_branch)
ggl git pull origin $(current_branch)
ggp git push origin $(current_branch)
ggpnp ggl && ggp
ggpull git pull origin “$(git_current_branch)”
ggpur ggu
ggpush git push origin “$(git_current_branch)”
ggsup git branch –set-upstream-to=origin/$(git_current_branch)
ggu git pull –rebase origin $(current_branch)
gpsup git push –set-upstream origin $(git_current_branch)
gpsupf git push –set-upstream origin $(git_current_branch) –force-with-lease –force-if-includes (git version >= 2.30)
gpsupf git push –set-upstream origin $(git_current_branch) –force-with-lease (git version < 2.30)
ghh git help
gignore git update-index –assume-unchanged
gignored git ls-files -v | grep “^[[:lower:]]”
git-svn-dcommit-push git svn dcommit && git push github $(git_main_branch):svntrunk
gk gitk –all –branches &!
gke gitk –all $(git log –walk-reflogs –pretty=%h) &!
gl git pull
glg git log –stat
glgp git log –stat –patch
glgg git log –graph
glgga git log –graph –decorate –all
glgm git log –graph –max-count=10
glo git log –oneline –decorate
glol git log –graph –pretty=’%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset'
glols git log –graph –pretty=’%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset’ –stat
glod git log –graph –pretty=’%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ad) %C(bold blue)<%an>%Creset'
glods git log –graph –pretty=’%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ad) %C(bold blue)<%an>%Creset’ –date=short
glola git log –graph –pretty=’%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset’ –all
glog git log –oneline –decorate –graph
gloga git log –oneline –decorate –graph –all
glp git log –pretty=<format>
gm git merge
gms git merge –squash
gmom git merge origin/$(git_main_branch)
gmtl git mergetool –no-prompt
gmtlvim git mergetool –no-prompt –tool=vimdiff
gmum git merge upstream/$(git_main_branch)
gma git merge –abort
gp git push
gpd git push –dry-run
gpf git push –force-with-lease –force-if-includes (git version >= 2.30)
gpf git push –force-with-lease (git version < 2.30)
gpf! git push –force
gpoat git push origin –all && git push origin –tags
gpod git push origin –delete
gpr git pull –rebase
gpu git push upstream
gpv git push –verbose
gr git remote
gra git remote add
grb git rebase
grba git rebase –abort
grbc git rebase –continue
grbd git rebase $(git_develop_branch)
grbi git rebase –interactive
grbm git rebase $(git_main_branch)
grbom git rebase origin/$(git_main_branch)
grbo git rebase –onto
grbs git rebase –skip
grev git revert
grh git reset
grhh git reset –hard
groh git reset origin/$(git_current_branch) –hard
grm git rm
grmc git rm –cached
grmv git remote rename
grrm git remote remove
grs git restore
grset git remote set-url
grss git restore –source
grst git restore –staged
grt cd “$(git rev-parse –show-toplevel || echo .)”
gru git reset –
grup git remote update
grv git remote –verbose
gsb git status –short -b
gsd git svn dcommit
gsh git show
gsi git submodule init
gsps git show –pretty=short –show-signature
gsr git svn rebase
gss git status –short
gst git status
gsta git stash push (git version >= 2.13)
gsta git stash save (git version < 2.13)
gstaa git stash apply
gstc git stash clear
gstd git stash drop
gstl git stash list
gstp git stash pop
gsts git stash show –text
gstu git stash –include-untracked
gstall git stash –all
gsu git submodule update
gsw git switch
gswc git switch -c
gswm git switch $(git_main_branch)
gswd git switch $(git_develop_branch)
gts git tag -s
gtv git tag | sort -V
gtl gtl(){ git tag –sort=-v:refname -n –list ${1}* }; noglob gtl
gunignore git update-index –no-assume-unchanged
gunwip git log –max-count=1 | grep -q -c “--wip--” && git reset HEAD~1
gup git pull –rebase
gupv git pull –rebase –verbose
gupa git pull –rebase –autostash
gupav git pull –rebase –autostash –verbose
gupom git pull –rebase origin $(git_main_branch)
gupomi git pull –rebase=interactive origin $(git_main_branch)
glum git pull upstream $(git_main_branch)
gluc git pull upstream $(git_current_branch)
gwch git whatchanged -p –abbrev-commit –pretty=medium
gwip git add -A; git rm $(git ls-files –deleted) 2> /dev/null; git commit –no-verify –no-gpg-sign –message “–wip– [skip ci]”
gam git am
gamc git am –continue
gams git am –skip
gama git am –abort
gamscp git am –show-current-patch
gwt git worktree
gwtls git worktree list
gwtmv git worktree move
gwtrm git worktree remove