summaryrefslogtreecommitdiffstats
path: root/git/config
blob: cc473ed8af720bdde3bedb34b6d8acdead5c42ef (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
[pretty]
	log = %C(yellow)%h%C(reset) %C(normal)%s%C(reset) %C(dim white)%an%C(reset) %C(dim blue)(%ar)%C(reset) %C(auto)%d%C(reset)
	oldlog = %C(blue)%h%C(reset) - %C(white)(%ar)%C(reset) %s %C(red)%d%C(reset) %C(bold blue)— %an%C(reset)

[alias]
	lg = log --graph --abbrev-commit --color --pretty=log

	l = lg -n 15
	ll = lg --all
	lf = lg --name-status
	lp = lg --first-parent

	s = status -s
	ss = status
	a = add
	ai = add -i
	p = push
	pu = pull
	f = fetch
	fa = fetch --all
	c = commit
	dt = difftool
	dtg = difftool -g
	b = branch
	bv = branch -v
	bva = branch -va
	co = checkout
	cb = checkout -b
	d = diff --stat
	dd = diff
	m = merge --no-ff
	r = remote
	rv = remote -v
	rb = rebase
	rbi = rebase -i
	fap = fetch --all -p -t
	stash-all = stash save --include-untracked

	# List every branch, local and remote, in order of most recent to oldest commit, showing the branch's last commit and some last commit meta-data
	br = for-each-ref --sort=-committerdate refs/heads/ refs/remotes/origin/ --format='%(HEAD) %(color:yellow)%(refname:short)%(color:reset) - %(color:red)%(objectname:short)%(color:reset) - %(contents:subject) - %(authorname) (%(color:green)%(committerdate:relative)%(color:reset))' -

	# ff [<args>]
	# if no <args> are given, tries to fast-forward with the upstream branch
	ff = !"perl -MGit -E' \
		push @ARGV, Git::command_oneline(qw/rev-parse --abbrev-ref --symbolic-full-name @{u}/) unless @ARGV; \
		Git::command_noisy(qw{merge --ff-only}, @ARGV); \
		'"
	# ff = merge --ff-only

	# tomerge [<branch> [<regex>]] tells you which branches matching <regex> have not been merged into <branch> yet
	# <branch> defaults to HEAD
	# <regex> defaults to .
	tomerge = !"perl -MGit -E' \
		my ($br, $rx) = (shift // q{HEAD}, shift // qr{.}); \
		say for grep { \
			/$rx/ && !/\\b(master|maint|next)/; \
		} Git::command(qw{branch -r --no-merged}, $br); \
		'"

	# topics [<regex>]
	# show topics (branches) matching the ai/description format or <regex>
	topics = !"perl -MGit -MList::Util=uniq -E' \
		my $rx = shift // qr{[a-z]{1,3}/.}; \
		say for uniq map { \
			$_ = (split /\\s/)[2]; \
			s!(remotes|origin)/!!g; \
			/$rx/ && !/HEAD/ ? $_ : () \
		} Git::command(qw/branch --sort=committerdate -r/) \
		'"

	# rmbranch [<repository>] <branchname> deletes local and remote branch
	# <repository> defaults to origin
	rmbranch = !"perl -MGit -E' \
		my ($re, $br) = (@ARGV > 1? shift : q{origin}, shift // q{}); \
		Git::command_noisy(qw{branch -d}, $br); \
		Git::command_noisy(qw{push -d}, $re, $br); \
		'"