SlideShare a Scribd company logo
1 of 62
Git Tips
by Arthur Shvetsov
CoreValue/MalkosUA
Agenda
● Git common principles and design goals
● Merging vs. Rebasing
● How to rewrite history?
● A successful Git branching model
What is Git?
● Git is a distributed revision control and source code
management (SCM) system with an emphasis on
speed, data integrity, and support for distributed, non-
linear workflows.
● Git was initially designed and developed by Linus
Torvalds for Linux kernel development in 2005, and has
since become the most widely adopted version control
system for software development.
Git design goals
● Speed
● Simple design
● Strong support for thousands of parallel branches
● Fully distributed
o full local repository
o offline commits
o full size repository
● Able to handle large projects like Linux kernel effectively
● Ensure integrity
Git drawbacks
● Big committed files will be in every clone of
repository
● No partial checkout
● No lock
● No support of empty directories
Git philosophy
● Commit early, commit often
● One commit represents one idea or one
change
o Make it easy to read patches
o Easy to revert unwanted changes later
● Your working directory, index and local
repository are your scratch pads
Git architecture
Nearly Every Operation Is Local
Snapshots, Not Differences
The major difference between Git and any
other VCS (Subversion and friends included) is
the way Git thinks about its data.
Tracking changes (most VCS)
Storing data as changes to a base version of each file
Tracking changes (the Git way)
Storing data as snapshots of the project over time
Git Generally Only Adds Data
File status lifecycle
The Staging Area
The staging area is a buffer between the
working directory and the project repository.
What happens when you create a
commit ?
What happens when you create a
new branch?
$ git branch testing
How does Git know what branch
you’re currently on?
What happens when you switch a
branch?
$ git checkout testing
Merging vs. Rebasing
Merging vs. Rebasing
git rebase and git merge - both of these
commands are designed to solve the same
problem - integrate changes from one branch
into another branch — they just do it in very
different ways.
A forked commit history
To incorporate the new commits into your feature branch,
you have two options: merging or rebasing.
Merging master into feature branch
$ git checkout feature
$ git merge master
Pros
● Simple to use and understand
● Merging is a non-destructive operation
● The existing branches are not changed in any way
Cons
● The feature branch will have an extraneous merge
commit every time you need to incorporate changes
● Visual charts of repository can have non-informative
branch lines
Git merge pros and cons
The Rebase Option
$ git checkout feature
$ git rebase master
Pros
● Much cleaned project history
● Eliminates the unnecessary merge commits required by git merge
● A perfectly linear project history
Cons
● Re-writing project history can be potentially catastrophic for your
collaboration workflow
● Rebasing loses the context provided by a merge commit - you can’t
see when upstream changes were incorporated into the feature
Git rebase pros and cons
Git rebase golden rule
Never use git rebase on public branches. Only rebase
local branches
When you rebase pushed branch, you’re
abandoning existing commits and creating
new ones that are similar but different
Interactive Rebase
$ git checkout feature
$ git rebase -i master
Pros
● Eliminating insignificant commits like this makes
your feature’s history much easier to understand.
This is something that git merge simply cannot do
Interactive rebase pros, no cons :)
Force Pushing
$ git push -f origin feature
Integrating an Approved Feature
Integrating an Approved Feature
Integrating an Approved Feature.
“Fast forward” effect
Rebasing a temporary branch
git checkout feature
git checkout -b temporary-branch
git rebase -i master
git checkout master
git merge temporary-branch
Git pull --rebase
By default, the git pull command performs a
merge, but you can force it to integrate the
remote branch with a rebase by passing it the --
rebase option.
$ git config branch.autosetuprebase always
How to rewrite history?
Git revert
Reverting undoes a commit by creating a new
commit. This is a safe way to undo changes, as
it has no chance of re-writing the commit
history.
$ git checkout hotfix
$ git revert HEAD~2
Git reset
Git reset as the dangerous method. When you
undo with git reset, there is no way to retrieve
the original copy—it is a permanent undo.
$ git checkout hotfix
$ git reset HEAD~2
Reverting vs. Resetting
git checkout
● checking out branches
● checking out commits - makes the entire
working directory match that commit
● checking out files - lets you see an old
version of that particular file, leaving the rest
of your working directory untouched
“Detached HEAD” state
$ git checkout HEAD~2
Multiple ways how to rewrite
history?
● $ git reset
● $ git rebase
Git cherry-pick
Applies the changes introduced by some
existing commits to specific branch
$ git checkout feature-branch
$ git cherry-pick <commit hash>
Stashing
Records the current state of the working
directory and the index, and cleans up the
working directory
$ git stash
Submodules
Submodule allows you to keep another Git
repository in a subdirectory of your repository
$ git submodule
A successful Git branching model
Decentralized but centralized
The main branches
● master
o contains production ready code
● develop
o an integration branch
o contains the latest changes
o used for nightly builds
o getting a production release
when merging with master
Supporting branches
● Feature branches
● Release branches
● Hotfix branches
Feature branches (topic branches)
● May branch off from:
o develop
● May merge back into:
o develop
● Branching name convention:
o anything except master, develop,
release-* or hotfix-*
Creating a feature branch
$ git checkout -b myfeature develop
Switched to a new branch “myfeature”
Incorporating a finished feature on develop
$ git checkout develop
Switched to branch 'develop'
$ git merge myfeature
Updating ea1b82a..05e9557 (Summary of changes)
$ git branch -d myfeature
Deleted branch myfeature (was 05e9557).
$ git push origin develop
Release branches
● May branch off from:
o develop
● Must merge back into:
o develop and master
● Branch naming convention:
o release-*
● Used for preparation of a new production release
● Allow minor bug-fixes
Creating a release branch
$ git checkout -b release-1.2 develop
Switched to a new branch "release-1.2"
Finishing a release branch
$ git checkout master
Switched to branch 'master'
$ git merge release-1.2
Merge made by recursive. (Summary of changes)
$ git tag -a 1.2
$ git checkout develop
Switched to branch 'develop'
$ git merge release-1.2
Merge made by recursive. (Summary of changes)
$ git branch -d release-1.2
Deleted branch release-1.2 (was ff452fe).
Hotfix branches
● May branch off from:
o master
● Must merge back into:
o develop and master
● Branch naming convention:
o hotfix-*
Creating a hotfix branch
$ git checkout -b hotfix-1.2.1 master
Switched to a new branch "hotfix-1.2.1"
$ git commit -m "Fixed severe production problem"
[hotfix-1.2.1 abbe5d6] Fixed severe production problem 5
files changed, 32 insertions(+), 17 deletions(-)
Finishing a hotfix branch
$ git checkout master
Switched to branch 'master'
$ git merge hotfix-1.2.1
Merge made by recursive. (Summary of changes)
$ git tag -a 1.2.1
$ git checkout develop
Switched to branch 'develop'
$ git merge hotfix-1.2.1
Merge made by recursive. (Summary of changes)
$ git branch -d hotfix-1.2.1
Deleted branch hotfix-1.2.1 (was abbe5d6).
Links and Literature
● Pro Git
● A successful Git branching model
● https://www.atlassian.com/git/tutorials/
● https://help.github.com/
Thank You!

More Related Content

What's hot

A Practical Introduction to git
A Practical Introduction to gitA Practical Introduction to git
A Practical Introduction to gitEmanuele Olivetti
 
Software Versioning with Bitbucket and Eclipse
Software Versioning with Bitbucket and EclipseSoftware Versioning with Bitbucket and Eclipse
Software Versioning with Bitbucket and EclipseHüseyin Ergin
 
BLUG 2012 Version Control for Notes Developers
BLUG 2012 Version Control for Notes DevelopersBLUG 2012 Version Control for Notes Developers
BLUG 2012 Version Control for Notes DevelopersMartin Jinoch
 
Git the fast version control system
Git the fast version control systemGit the fast version control system
Git the fast version control systemJeroen Rosenberg
 
Version control and GIT Primer
Version control and GIT PrimerVersion control and GIT Primer
Version control and GIT Primersaadulde
 
Training: Day Two - Eclipse, Git, Maven
Training: Day Two - Eclipse, Git, MavenTraining: Day Two - Eclipse, Git, Maven
Training: Day Two - Eclipse, Git, MavenArtur Ventura
 
Git and GitHub workflows
Git and GitHub workflowsGit and GitHub workflows
Git and GitHub workflowsArthur Shvetsov
 
Git Series. Episode 2. Merge, Upstream Commands and Tags
Git Series. Episode 2. Merge, Upstream Commands and TagsGit Series. Episode 2. Merge, Upstream Commands and Tags
Git Series. Episode 2. Merge, Upstream Commands and TagsMikhail Melnik
 
Workshop on Git and GitHub
Workshop on Git and GitHubWorkshop on Git and GitHub
Workshop on Git and GitHubDSCVSSUT
 
Take the next step with git
Take the next step with gitTake the next step with git
Take the next step with gitKarin Taliga
 
Introduction To Git For Version Control Architecture And Common Commands Comp...
Introduction To Git For Version Control Architecture And Common Commands Comp...Introduction To Git For Version Control Architecture And Common Commands Comp...
Introduction To Git For Version Control Architecture And Common Commands Comp...SlideTeam
 
Git with the flow
Git with the flowGit with the flow
Git with the flowDana White
 
Advanced Git: Functionality and Features
Advanced Git: Functionality and FeaturesAdvanced Git: Functionality and Features
Advanced Git: Functionality and FeaturesBrent Laster
 
Using GIT for Everyone
Using GIT for EveryoneUsing GIT for Everyone
Using GIT for EveryoneGLC Networks
 

What's hot (20)

A Practical Introduction to git
A Practical Introduction to gitA Practical Introduction to git
A Practical Introduction to git
 
Software Versioning with Bitbucket and Eclipse
Software Versioning with Bitbucket and EclipseSoftware Versioning with Bitbucket and Eclipse
Software Versioning with Bitbucket and Eclipse
 
BLUG 2012 Version Control for Notes Developers
BLUG 2012 Version Control for Notes DevelopersBLUG 2012 Version Control for Notes Developers
BLUG 2012 Version Control for Notes Developers
 
Git the fast version control system
Git the fast version control systemGit the fast version control system
Git the fast version control system
 
Real-World Git
Real-World GitReal-World Git
Real-World Git
 
Version control and GIT Primer
Version control and GIT PrimerVersion control and GIT Primer
Version control and GIT Primer
 
Training: Day Two - Eclipse, Git, Maven
Training: Day Two - Eclipse, Git, MavenTraining: Day Two - Eclipse, Git, Maven
Training: Day Two - Eclipse, Git, Maven
 
Git and GitHub workflows
Git and GitHub workflowsGit and GitHub workflows
Git and GitHub workflows
 
Git Series. Episode 2. Merge, Upstream Commands and Tags
Git Series. Episode 2. Merge, Upstream Commands and TagsGit Series. Episode 2. Merge, Upstream Commands and Tags
Git Series. Episode 2. Merge, Upstream Commands and Tags
 
Workshop on Git and GitHub
Workshop on Git and GitHubWorkshop on Git and GitHub
Workshop on Git and GitHub
 
Introduction to git
Introduction to gitIntroduction to git
Introduction to git
 
Take the next step with git
Take the next step with gitTake the next step with git
Take the next step with git
 
git Technologies
git Technologiesgit Technologies
git Technologies
 
Introduction To Git For Version Control Architecture And Common Commands Comp...
Introduction To Git For Version Control Architecture And Common Commands Comp...Introduction To Git For Version Control Architecture And Common Commands Comp...
Introduction To Git For Version Control Architecture And Common Commands Comp...
 
Git with the flow
Git with the flowGit with the flow
Git with the flow
 
Version controll.pptx
Version controll.pptxVersion controll.pptx
Version controll.pptx
 
Advanced Git: Functionality and Features
Advanced Git: Functionality and FeaturesAdvanced Git: Functionality and Features
Advanced Git: Functionality and Features
 
Git and Github Session
Git and Github SessionGit and Github Session
Git and Github Session
 
Git
GitGit
Git
 
Using GIT for Everyone
Using GIT for EveryoneUsing GIT for Everyone
Using GIT for Everyone
 

Similar to Git tips

Git tutorial
Git tutorialGit tutorial
Git tutorialmobaires
 
Collaborative development with Git | Workshop
Collaborative development with Git | WorkshopCollaborative development with Git | Workshop
Collaborative development with Git | WorkshopAnuchit Chalothorn
 
Introducing Git and git flow
Introducing Git and git flow Introducing Git and git flow
Introducing Git and git flow Sebin Benjamin
 
Hacktoberfest intro to Git and GitHub
Hacktoberfest intro to Git and GitHubHacktoberfest intro to Git and GitHub
Hacktoberfest intro to Git and GitHubDSC GVP
 
Git-flow workflow and pull-requests
Git-flow workflow and pull-requestsGit-flow workflow and pull-requests
Git-flow workflow and pull-requestsBartosz Kosarzycki
 
Git and git workflow best practice
Git and git workflow best practiceGit and git workflow best practice
Git and git workflow best practiceMajid Hosseini
 
Git-ing out of your git messes
Git-ing out of  your git messesGit-ing out of  your git messes
Git-ing out of your git messesKatie Sylor-Miller
 
Pro git - grasping it conceptually
Pro git - grasping it conceptuallyPro git - grasping it conceptually
Pro git - grasping it conceptuallyseungzzang Kim
 
Git and Github slides.pdf
Git and Github slides.pdfGit and Github slides.pdf
Git and Github slides.pdfTilton2
 
Git and Github workshop ppt slide by slide
Git and Github workshop ppt slide by slideGit and Github workshop ppt slide by slide
Git and Github workshop ppt slide by slideRaghavendraVattikuti1
 
Git slides
Git slidesGit slides
Git slidesNanyak S
 

Similar to Git tips (20)

Git tutorial
Git tutorialGit tutorial
Git tutorial
 
Collaborative development with Git | Workshop
Collaborative development with Git | WorkshopCollaborative development with Git | Workshop
Collaborative development with Git | Workshop
 
Git github
Git githubGit github
Git github
 
Introducing Git and git flow
Introducing Git and git flow Introducing Git and git flow
Introducing Git and git flow
 
Hacktoberfest intro to Git and GitHub
Hacktoberfest intro to Git and GitHubHacktoberfest intro to Git and GitHub
Hacktoberfest intro to Git and GitHub
 
Git-flow workflow and pull-requests
Git-flow workflow and pull-requestsGit-flow workflow and pull-requests
Git-flow workflow and pull-requests
 
Git and git workflow best practice
Git and git workflow best practiceGit and git workflow best practice
Git and git workflow best practice
 
Git-ing out of your git messes
Git-ing out of  your git messesGit-ing out of  your git messes
Git-ing out of your git messes
 
Pro git - grasping it conceptually
Pro git - grasping it conceptuallyPro git - grasping it conceptually
Pro git - grasping it conceptually
 
Git training v10
Git training v10Git training v10
Git training v10
 
Git and Github slides.pdf
Git and Github slides.pdfGit and Github slides.pdf
Git and Github slides.pdf
 
Git and Github workshop ppt slide by slide
Git and Github workshop ppt slide by slideGit and Github workshop ppt slide by slide
Git and Github workshop ppt slide by slide
 
Mastering GIT
Mastering GITMastering GIT
Mastering GIT
 
Advanced Git
Advanced GitAdvanced Git
Advanced Git
 
Introduction into Git
Introduction into GitIntroduction into Git
Introduction into Git
 
Demystifying Git
Demystifying GitDemystifying Git
Demystifying Git
 
Demystifying Git
Demystifying GitDemystifying Git
Demystifying Git
 
Gn unify git
Gn unify gitGn unify git
Gn unify git
 
Git slides
Git slidesGit slides
Git slides
 
Lets git to it
Lets git to itLets git to it
Lets git to it
 

Recently uploaded

why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfjoe51371421
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxComplianceQuest1
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comFatema Valibhai
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackVICTOR MAESTRE RAMIREZ
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxbodapatigopi8531
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionSolGuruz
 
Project Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationProject Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationkaushalgiri8080
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providermohitmore19
 
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...gurkirankumar98700
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
 
What is Binary Language? Computer Number Systems
What is Binary Language?  Computer Number SystemsWhat is Binary Language?  Computer Number Systems
What is Binary Language? Computer Number SystemsJheuzeDellosa
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfkalichargn70th171
 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantAxelRicardoTrocheRiq
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...harshavardhanraghave
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdfWave PLM
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...stazi3110
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...OnePlan Solutions
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerThousandEyes
 

Recently uploaded (20)

why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdf
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStack
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
 
Project Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationProject Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanation
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
What is Binary Language? Computer Number Systems
What is Binary Language?  Computer Number SystemsWhat is Binary Language?  Computer Number Systems
What is Binary Language? Computer Number Systems
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service Consultant
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS LiveVip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
 

Git tips

  • 1. Git Tips by Arthur Shvetsov CoreValue/MalkosUA
  • 2. Agenda ● Git common principles and design goals ● Merging vs. Rebasing ● How to rewrite history? ● A successful Git branching model
  • 3. What is Git? ● Git is a distributed revision control and source code management (SCM) system with an emphasis on speed, data integrity, and support for distributed, non- linear workflows. ● Git was initially designed and developed by Linus Torvalds for Linux kernel development in 2005, and has since become the most widely adopted version control system for software development.
  • 4. Git design goals ● Speed ● Simple design ● Strong support for thousands of parallel branches ● Fully distributed o full local repository o offline commits o full size repository ● Able to handle large projects like Linux kernel effectively ● Ensure integrity
  • 5. Git drawbacks ● Big committed files will be in every clone of repository ● No partial checkout ● No lock ● No support of empty directories
  • 6. Git philosophy ● Commit early, commit often ● One commit represents one idea or one change o Make it easy to read patches o Easy to revert unwanted changes later ● Your working directory, index and local repository are your scratch pads
  • 9. Snapshots, Not Differences The major difference between Git and any other VCS (Subversion and friends included) is the way Git thinks about its data.
  • 10. Tracking changes (most VCS) Storing data as changes to a base version of each file
  • 11. Tracking changes (the Git way) Storing data as snapshots of the project over time
  • 12. Git Generally Only Adds Data
  • 14. The Staging Area The staging area is a buffer between the working directory and the project repository.
  • 15. What happens when you create a commit ?
  • 16.
  • 17. What happens when you create a new branch? $ git branch testing
  • 18. How does Git know what branch you’re currently on?
  • 19. What happens when you switch a branch? $ git checkout testing
  • 21. Merging vs. Rebasing git rebase and git merge - both of these commands are designed to solve the same problem - integrate changes from one branch into another branch — they just do it in very different ways.
  • 22. A forked commit history To incorporate the new commits into your feature branch, you have two options: merging or rebasing.
  • 23. Merging master into feature branch $ git checkout feature $ git merge master
  • 24. Pros ● Simple to use and understand ● Merging is a non-destructive operation ● The existing branches are not changed in any way Cons ● The feature branch will have an extraneous merge commit every time you need to incorporate changes ● Visual charts of repository can have non-informative branch lines Git merge pros and cons
  • 25. The Rebase Option $ git checkout feature $ git rebase master
  • 26. Pros ● Much cleaned project history ● Eliminates the unnecessary merge commits required by git merge ● A perfectly linear project history Cons ● Re-writing project history can be potentially catastrophic for your collaboration workflow ● Rebasing loses the context provided by a merge commit - you can’t see when upstream changes were incorporated into the feature Git rebase pros and cons
  • 27. Git rebase golden rule Never use git rebase on public branches. Only rebase local branches
  • 28. When you rebase pushed branch, you’re abandoning existing commits and creating new ones that are similar but different
  • 29. Interactive Rebase $ git checkout feature $ git rebase -i master
  • 30. Pros ● Eliminating insignificant commits like this makes your feature’s history much easier to understand. This is something that git merge simply cannot do Interactive rebase pros, no cons :)
  • 31. Force Pushing $ git push -f origin feature
  • 34. Integrating an Approved Feature. “Fast forward” effect
  • 35. Rebasing a temporary branch git checkout feature git checkout -b temporary-branch git rebase -i master git checkout master git merge temporary-branch
  • 36. Git pull --rebase By default, the git pull command performs a merge, but you can force it to integrate the remote branch with a rebase by passing it the -- rebase option. $ git config branch.autosetuprebase always
  • 37. How to rewrite history?
  • 38. Git revert Reverting undoes a commit by creating a new commit. This is a safe way to undo changes, as it has no chance of re-writing the commit history.
  • 39. $ git checkout hotfix $ git revert HEAD~2
  • 40. Git reset Git reset as the dangerous method. When you undo with git reset, there is no way to retrieve the original copy—it is a permanent undo.
  • 41. $ git checkout hotfix $ git reset HEAD~2
  • 43. git checkout ● checking out branches ● checking out commits - makes the entire working directory match that commit ● checking out files - lets you see an old version of that particular file, leaving the rest of your working directory untouched
  • 44. “Detached HEAD” state $ git checkout HEAD~2
  • 45. Multiple ways how to rewrite history? ● $ git reset ● $ git rebase
  • 46. Git cherry-pick Applies the changes introduced by some existing commits to specific branch $ git checkout feature-branch $ git cherry-pick <commit hash>
  • 47. Stashing Records the current state of the working directory and the index, and cleans up the working directory $ git stash
  • 48. Submodules Submodule allows you to keep another Git repository in a subdirectory of your repository $ git submodule
  • 49. A successful Git branching model
  • 51. The main branches ● master o contains production ready code ● develop o an integration branch o contains the latest changes o used for nightly builds o getting a production release when merging with master
  • 52. Supporting branches ● Feature branches ● Release branches ● Hotfix branches
  • 53. Feature branches (topic branches) ● May branch off from: o develop ● May merge back into: o develop ● Branching name convention: o anything except master, develop, release-* or hotfix-*
  • 54. Creating a feature branch $ git checkout -b myfeature develop Switched to a new branch “myfeature” Incorporating a finished feature on develop $ git checkout develop Switched to branch 'develop' $ git merge myfeature Updating ea1b82a..05e9557 (Summary of changes) $ git branch -d myfeature Deleted branch myfeature (was 05e9557). $ git push origin develop
  • 55. Release branches ● May branch off from: o develop ● Must merge back into: o develop and master ● Branch naming convention: o release-* ● Used for preparation of a new production release ● Allow minor bug-fixes
  • 56. Creating a release branch $ git checkout -b release-1.2 develop Switched to a new branch "release-1.2"
  • 57. Finishing a release branch $ git checkout master Switched to branch 'master' $ git merge release-1.2 Merge made by recursive. (Summary of changes) $ git tag -a 1.2 $ git checkout develop Switched to branch 'develop' $ git merge release-1.2 Merge made by recursive. (Summary of changes) $ git branch -d release-1.2 Deleted branch release-1.2 (was ff452fe).
  • 58. Hotfix branches ● May branch off from: o master ● Must merge back into: o develop and master ● Branch naming convention: o hotfix-*
  • 59. Creating a hotfix branch $ git checkout -b hotfix-1.2.1 master Switched to a new branch "hotfix-1.2.1" $ git commit -m "Fixed severe production problem" [hotfix-1.2.1 abbe5d6] Fixed severe production problem 5 files changed, 32 insertions(+), 17 deletions(-)
  • 60. Finishing a hotfix branch $ git checkout master Switched to branch 'master' $ git merge hotfix-1.2.1 Merge made by recursive. (Summary of changes) $ git tag -a 1.2.1 $ git checkout develop Switched to branch 'develop' $ git merge hotfix-1.2.1 Merge made by recursive. (Summary of changes) $ git branch -d hotfix-1.2.1 Deleted branch hotfix-1.2.1 (was abbe5d6).
  • 61. Links and Literature ● Pro Git ● A successful Git branching model ● https://www.atlassian.com/git/tutorials/ ● https://help.github.com/