nox.im ยท All Snippets
Setup user name and email on a per repository basis:
git config user.name "dre"
git config user.email "email@example.org"
With a team in multiple timezones we’re all starting to think in UTC. Commits have two timestamps, the “author date” and the “commit date”. Both can be changed by setting the TZ environment variable.
TZ=UTC git commit
See how to setup and use multiple SSH keys in my other post.
There are easy ways to specify time for specific commits and add git commits in the past. Remember that merging branches with such commits can retroactively change the timeline of a git repository.
git commit --date="yesterday" -m "commit msg"
git commit --date="3 day ago" -m "commit msg"
git commit --date="2006-01-02 15:04:05" -m "message"
Creating git patches in order to exchange diff files of changes made to a git repository, between two branches or unstaged.
git format-patch <branch> <options>
Example, we’re making changes on a feature branch and committing there.
git branch patch-branch
git checkout patch-branch
git commit -am "committing changes"
We can then create patch files from commits
git format-patch master
0001-my-changes.patch
0002-my-other-changes.patch
Another example, we want to create a patch set for the last 10 commits from HEAD:
git format-patch -10 HEAD
Someone else can now apply this patch set, ideally on a branch and not master.
git am <patch_file>
git apply <patch_file>
Or bulk apply 10 patch sets:
git am -3k 00*.patch
Signing into multiple GitHub accounts while working on the same day on different projects can be tedious. The GitHub CLI allows for some more convenience:
brew install gh
gh auth login
# go through the browser auth process
before doing anything, check that you’re on the correct account
gh api user --jq '"You are @\(.login) (\(.name))."'
and now we can add a repository without opening a browser
gh repo create --source . --public --remote git@github.com:n0x1m/opentelemetry-logger.git
In order to go get private GitHub repositories, create a new personal access token at github.com/settings/tokens/new.
export GITHUB_TOKEN=gh...
git config --global url."https://${GITHUB_TOKEN}:x-oauth-basic@github.com/".insteadOf "https://github.com/"
export GOPRIVATE=github.com/username/repo
Test
go get -u -f github.com/username/repo
In situations where we are open sourcing a company internal repository, we often have the options to wipe the history and publish with a single “initial commit” or rewrite authors with publicly acceptable names and emails. Branch out for the rewrite:
git branch rewrite
git checkout rewrite
set the correct author in this repository
git config user.name "dre"
git config user.email "noxim@nox.im"
change everything after commit d18590053de58631da12cb2c6c11210fd1f548c8
git rebase -r d18590053de58631da12cb2c6c11210fd1f548c8 --exec 'git commit --amend --no-edit --reset-author'
OR change all including root
git rebase -r --root --exec 'git commit --amend --no-edit --reset-author'
then push the rewrite branch to a new master target
git push backup rewrite:master