git
Cheers to tobhe and sbeattie \o/
print commit unix time
git log -1 --format=%ct $COMMIT
create patch
git format-patch --no-stat --stdout -1 $COMMIT > foo.patch
recent log summary
git shortlog --since="one week"
check which tags contain commit
git tag --contains $COMMIT
check GitHub pull request
git fetch origin pull/ID/head:BRANCH_NAME
Kernel style “Fixes” oneliner
Append to ~/.gitconfig
:
[pretty]
# format used in fixes lines, also useful for general references
fixes = Fixes: %h (\"%s\")
Use with:
$ git show -q --format=fixes $COMMIT
Fixes: 3f30a274913 ("libiberty: Update D symbol demangling for latest ABI spec.")
cleanly merge remote branch (without GitHub UI)
Rebase remote branch with the upstream branch you intend to merge with:
cd my-fork/
git checkout my-branch
git fetch upstream
git rebase -i upstream/main
git push --force
Prep for merge:
cd non-remote-git/
# update
git remote add eslerm git+ssh://[email protected]/~eslerm/my-fork
git remote update eslerm
git checkout main
Because there are no interleaved commits after rebase, git will fast forward merge. To preserve the branch, use --no-ff
:
git merge --no-ff eslerm/my-branch
git push
diff file commits
git difftool --tool=vimdiff --no-prompt $commit1 $commit2 -- $file
nb: this works on refs, branches do not matter
git-blame-someone-else
https://github.com/jayphelps/git-blame-someone-else
git blame ignore
git blame --ignore-rev $COMMIT
# or
echo $COMMIT >> .git-blame-ignore-revs
Useful for black
.
remove secret or onerous files
This only works locally! GitHub will keep files from stale branches, even if they are destructively removed.. Cheers to Dylan Ayrey for identifying this.
Nightwatch Cybersecurity claimed a CVE in git, because they did not understand how git refs work. Junio clarified that CVE-2022-24975 is not a vulnerability or bug to Nightwatch Cybersecurity before the CVE was assigned.
visualize branch topology
git log --graph --decorate --oneline
or:
tig
tig status
tig status
e
dit files and stage or unstage them (u
).
backlog notes
Add notes from So You Think You Know Git - FOSDEM 2024.
amend batch of commits
This is destructive to history.
Rollback commits:
git rebase -i HEAD~7
To sign, after each ^pick
line:
exec git commit --amend --no-edit -S