Git

"The stupid content tracker"

git-rebase

"Reapply commits on top of another base tip"

Use case 1: uppstädning innan push

Use case 2: flytta en branch (ändra parent)

Use case 3: redigera commits (historik)

rebase: städa innan push

rebase: flytta en branch

rebase: flytta en branch

rebase: flytta en branch

rebase: flytta en branch

rebase: flytta en branch

rebase: flytta en branch

rebase: flytta en branch

rebase: redigera historik

push

Är branchen redan pushad före rebase?

  1. git push -f (force-push)
  2. Ta bort branch, pusha igen (PR stängs)

Föredra

--force-with-lease

Bitbucket PR

--fixup
--autosquash


$ git commit --fixup HEAD     # SHA, branch, ref
$ git commit --fixup :/text   # sök commitmeddelande efter "text"
					
$ git rebase --autosquash -i master

git-bisect

"Use binary search to find the commit that introduced a bug"


$ git bisect start
$ git bisect bad
$ git bisect good v1.2.0
					

git-bisect


git bisect run <cmd>...
					

Hooks

.git/hooks

  • pre-commit
  • pre-push
  • ...

man githooks

Skapa egna kommandon

"git foobar" letar efter "git-foobar" i $PATH

git-stash


$ git stash        # lägger allt uncommited till stacken
$ git stash list   # listar innehåll på stacken
$ git stash show   # visar senaste innehållet
$ git stash pop    # lägger tillbaka från stacken till working copy
$ git stash drop   # tar bort från stacken
					

git-rev-list


$ git rev-list origin/master..HEAD
1d574026fbbf84feb67917810c5d8af7a093320d
56624df871c8d87fc916198e4423d716fff87973
1d045be15f4df428c06d9bd9a5b19b9dadb6aae7
b05fde069ab0af86c3d061243daa0b5f4bb32d7f
					

git-reflog

När olyckan är framme


$ git reflog
1d57402 (HEAD -> master) HEAD@{0}: reset: moving to HEAD
1d57402 (HEAD -> master) HEAD@{1}: commit: figures
56624df HEAD@{2}: commit: branch figure test
1d045be HEAD@{3}: commit: outline
b05fde0 HEAD@{4}: rebase -i (finish): returning to refs/heads/master
b05fde0 HEAD@{5}: rebase -i (fixup): presenter view
4021ded HEAD@{6}: rebase -i (start): checkout origin/master
6d50af6 HEAD@{7}: commit: fixup! presenter view
4021ded HEAD@{8}: commit: presenter view
09e5f33 (origin/master) HEAD@{9}: commit: node image
a6d0c5d HEAD@{10}: commit (initial): stub
					

git-cherry-pick


$ git cherry-pick 2a33789
					

--porcelain


$ git status --porcelain
 M figures/merge2.dot
 M figures/rebase-merge.dot
 A figures/rebase2.dot
?? todo.org
					

Frågor?