-Advanced

Commit Early, Commit Oftern!

Key concept: Merge Vs Rebase

  • Integrate changes from one branch to another
  • Once you are done with your feature, you merge it back into master
  • Every time you merge there will be a merge commit
$ git checkout feature

$ git merge master


OR


$ git merge master feature
Benefits:

* Existing branches are not changed in any way
* Preserve the complete history of your project and avoid the risk of re-writing public commits

Bad about Merge:

* Every time you merge, it will create a new commit for that, which can leads
  to polluted history

Key concept: Rebase

  • Integrate changes from one branch to another
  • It solves the same problem as git merge
  • Moves the entire branch to begin on the tip of another branch
  • Rewrite the project history by creating new commits
$ git checkout feature

$ git rebase master

Moved the entire feature branch to begin on the tip of the master branch

Benefits:

* Get a clean project history
* Eliminates the unnecessary merge commits required by git merge
* Gives a perfect linear project history

Disadvantages:

* If you don’t follow the Golden Rule of Rebasing, re-writing project history 
  can be problematic
* Loses the context provided by a merge commit — 

The Golden rule of Rebasing

  • Never use it on public branches
    

rebased master onto your feature branch

Key concept: Interactive Rebasing

  • Gives you the opportunity to alter commits as they are moved to the new branch
  • More powerful than an automated rebase
  • You can use it to clean up a messy history before merging a feature branch into master

pick 33d5b7a Message for commit #1
pick 9480b3d Message for commit #2
pick 5c67e61 Message for commit #3

# Rebase 2b4dba8..eb98833 onto 2b4dba8 (7 command(s))
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
# d, drop = remove commit
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out
$ git checkout feature
$ git rebase -i master

Local Cleanup: Squashing/Dropping


$ git checkout feature
$ git rebase -i HEAD~3

Some important commands:

  • $ git commit --amend
    • amend the changes in last commit, don't create a new commit
  • git checkout commit_hash
    • checkout the repo state at that specified commit
  • git revert commit_hash
    • revert the changes by creating a new commit
  • git reset commit_hash
    • match the state of the repository at that specified commit

key Points:

  • Don't forget to use amend
  • You always have to follow Golden rule of Rebasing
  • You have to use --force push if your branch conflicts with remote branch

Thanks

Made with Slides.com