Git cookbook
Useful aliases
This is a list of useful aliases I’ve found on the Internet1. To use them, simply add them to the [alias]
section of ~/.gitconfig
.
Sync with main branch
This command updates the local branch with the origin’s main
.
[alias]
synced = "!git pull origin $(git mainbranch) --rebase"
Tree
Truncate history
To truncate Git history, that is discard all commits before a specific one, you can do the following.
Assume I have a commit with a certain hash, say abc123
, and want to drop all commits before this one.
Create a new orphan branch (name not important) called, say, truncated
.
$ git checkout --orphan truncated abc123
And then rebase master
(or any other main
branch) on top of truncated
.
$ git commit -m "Truncate history"
$ git rebase --onto truncated abc123 master
Your new branch truncated
will be free of master
history.
Hooks
pre-push
The pre-push script is called by git push
, when the push actually happens.
If the exit status is 0
, then the push will proceed, otherwise it will be stopped.
The script is supplied with the following arguments:
$1 -- Name of the remote to which the push is being done (Ex: origin)
$2 -- URL to which the push is being done (Ex: https://<host>:<port>/<username>/<project_name>.git)
Information about the commits which are being pushed is supplied as lines to the standard input in the form:
<local_ref> <local_sha1> <remote_ref> <remote_sha1>
Sample values:
local_ref = refs/heads/master
local_sha1 = 68a07ee4f6af8271dc40caae6cc23f283122ed11
remote_ref = refs/heads/master
remote_sha1 = efd4d512f34b11e3cf5c12433bbedd4b1532716f