GIT

for beginners++

Krzysztof Szumny - noisy

git tips

 

  • don't use fancy gui programs for git - use console!
  • explicit over implicit
  • learn how to work with multiple repositories
  • draw your branches!
    • git log --decorate
  • be obsessed about your git status
    • customized prompt
  • Basic


     

  • Advanced

git prompt

Real live examples:

git log

git log --decorate --graph --oneline

git log

git log --decorate

git log --decorate --graph 

the power of -p

Multiple repositories

local and remote

Typical tasks which requires

counterintuitive solutions

  • Modifying a commit
  • Deleting a branch
  • Deleting a commit

Modifying a commit

Push a branch

git push <repo> <remote_branch>
git push origin feature-8

git push <repo> <branch>:<remote_branch>
git push origin feature-8:feature-8

git push <repo> <branch>:<remote_branch>
git push origin feature-8~1:feature-8

Delete a branch

git push <repo> <branch>:<remote_branch>

git push origin :feature-8

git push <repo> --delete <remote_branch>

git push origin --delete feature-8

Reset a branch/delete a commit

git reset --hard <hash/branch>

git reset --hard HEAD~1

git reset --hard origin/feature-8

Rebase

  • rebase - what is that?
  • why rebase is needed
  • lets imagine that there is no rebase...
    • how to manually achieve this same result
  • how git know what commits need to be rebased
  • git rebase interactive
  • git rebase --onto

When we need rebase?

1. New changes were pushed to base branch

When we need rebase?

2. when we want to delete a commit, which is not the last

When we need rebase?

3. commits are on wrong branch

*this is more difficult rebase, requires --onto

How rebasing works

rebase is like automated version of cherry-pick

so let's explain very quickly how git cherry-pick works...

$ git cherry-pick feature-7~1

How rebasing works

$ git rebase master


Lets take a look on git rebase --interactive
demo: https://asciinema.org/a/bgau9swvdqz2jqx7fxyjq57tb

How git knows which commits needs to be rebased

$ git merge-base master feature-8
C

git merge-base <branch> <branch>

branch from another branch

# being on feature-9
git rebase feature-8
# being on feature-8
git rebase master
# being on feature-9
git rebase feature-8   #???
# being on feature-9
git rebase --onto feature-8 feature-9~3 feature-9

Upcoming scheduled livestream:

Lecture: Git for beginners++

  • Duration: 45 minutes + Q&A session
  • Language: English
  • When?

Q&A

GIT

By noisy

GIT

  • 2,386