際際滷

際際滷Share a Scribd company logo
a handful of Git
敬看姻一鍖o敬s for the
      agilist

        steven harman
    twitter: stevenharman
   http://stevenharman.net
stop worrying
   and start
loving The Git.
picture Git


image via: http://nvie.com/git-model
basic branch/feature
      敬看姻一鍖o敬
remote Git repository (origin)




                   master
remote Git repository (origin)




                                    master




                local Git repository (your clone)


:> git clone git@github.com:stevenharman/foo.git
:> cd foo
:master>

                                   master    origin/master
remote Git repository (origin)




                                    master




                local Git repository (your clone)



:master> git checkout -b feature
:feature> [... hackity-hack-hack ...]
:feature> git commit -am did something awesome.

                  feature
                                   master    origin/master
remote Git repository (origin)



// someone else pushed a change to the remote.
                                    master

                                    master




                local Git repository (your clone)




                  feature
                                   master    origin/master
remote Git repository (origin)




                                    master

                                    master




                local Git repository (your clone)




:feature> [... more hackity-hack-hack ...]
:feature> git commit -am more awesomeness. bacon!

                  feature

                  feature
                                   master    origin/master
remote Git repository (origin)




                                    master

                                    master




                local Git repository (your clone)




:feature> git fetch origin

                  feature
                                    origin/master
                  feature
                                   master    origin/master
remote Git repository (origin)




                                    master

                                    master




                local Git repository (your clone)




:feature> git checkout master
:master> git merge origin/master

                  feature
                                   master     origin/master
                                    origin/master
                  feature
                                   master     origin/master
remote Git repository (origin)




                                    master

                                    master




                local Git repository (your clone)




:master> git merge feature
                                   master

                  feature
                                    origin/master
                                   master     origin/master
                                    origin/master
                  feature
                                   master     origin/master
remote Git repository (origin)




                    master

                    master




local Git repository (your clone)




  feature
                   master     origin/master
                    origin/master
  feature
                   master     origin/master
remote Git repository (origin)




                                    master

                                    master




                local Git repository (your clone)


:master> git checkout feature
:feature> git rebase master
                  feature
                                   master

                  feature
                                    origin/master
                                   master     origin/master
                                    origin/master
                  feature
                                   master     origin/master
remote Git repository (origin)




                                    master

                                    master




                local Git repository (your clone)


:feature> git checkout master
:master> git merge feature
                       feature
                  feature          master
                                   master

                  feature
                                    origin/master
                                    origin/master
                                   master     origin/master
                  feature
                                   master     origin/master
remote Git repository (origin)



                                    master




                                    master




                local Git repository (your clone)



:master> git push origin master

                       feature
                  feature          master     origin/master
                                   master

                  feature
                                    origin/master
                                    origin/master
                                   master     origin/master
                  feature
                                   master     origin/master
remote Git repository (origin)



                                    master




                                    master




                local Git repository (your clone)



:master> git branch -d feature

                       feature
                  feature          master     origin/master
                                   master

                  feature
                                    origin/master
                                    origin/master
                                   master     origin/master
                  feature
                                   master     origin/master
derivations

 branch for a spike
 branches for concurrent design
 push/pull changes directly from teammate
 stashing changes temporarily
 reset to prior commit (in case of FUBAR)
some cool tools for
    your Git utility belt
   git reset
   git cherry-pick
   git stash
   git bisect
   git add -p
   git re鍖og
   git svn
get Git info

 http://ProGit.org (the site for THE book)
 http://gitready.com
 http://gitcasts.com
 http://whygitisbetterthanx.com/
 http://delicious.com/stevenharman/git
fork these slides from
http://github.com/stevenharman/git-敬看姻一鍖o敬s




                 steven harman
             twitter: stevenharman
            http://stevenharman.net

More Related Content

Git workflow

  • 1. a handful of Git 敬看姻一鍖o敬s for the agilist steven harman twitter: stevenharman http://stevenharman.net
  • 2. stop worrying and start loving The Git.
  • 3. picture Git image via: http://nvie.com/git-model
  • 4. basic branch/feature 敬看姻一鍖o敬
  • 5. remote Git repository (origin) master
  • 6. remote Git repository (origin) master local Git repository (your clone) :> git clone git@github.com:stevenharman/foo.git :> cd foo :master> master origin/master
  • 7. remote Git repository (origin) master local Git repository (your clone) :master> git checkout -b feature :feature> [... hackity-hack-hack ...] :feature> git commit -am did something awesome. feature master origin/master
  • 8. remote Git repository (origin) // someone else pushed a change to the remote. master master local Git repository (your clone) feature master origin/master
  • 9. remote Git repository (origin) master master local Git repository (your clone) :feature> [... more hackity-hack-hack ...] :feature> git commit -am more awesomeness. bacon! feature feature master origin/master
  • 10. remote Git repository (origin) master master local Git repository (your clone) :feature> git fetch origin feature origin/master feature master origin/master
  • 11. remote Git repository (origin) master master local Git repository (your clone) :feature> git checkout master :master> git merge origin/master feature master origin/master origin/master feature master origin/master
  • 12. remote Git repository (origin) master master local Git repository (your clone) :master> git merge feature master feature origin/master master origin/master origin/master feature master origin/master
  • 13. remote Git repository (origin) master master local Git repository (your clone) feature master origin/master origin/master feature master origin/master
  • 14. remote Git repository (origin) master master local Git repository (your clone) :master> git checkout feature :feature> git rebase master feature master feature origin/master master origin/master origin/master feature master origin/master
  • 15. remote Git repository (origin) master master local Git repository (your clone) :feature> git checkout master :master> git merge feature feature feature master master feature origin/master origin/master master origin/master feature master origin/master
  • 16. remote Git repository (origin) master master local Git repository (your clone) :master> git push origin master feature feature master origin/master master feature origin/master origin/master master origin/master feature master origin/master
  • 17. remote Git repository (origin) master master local Git repository (your clone) :master> git branch -d feature feature feature master origin/master master feature origin/master origin/master master origin/master feature master origin/master
  • 18. derivations branch for a spike branches for concurrent design push/pull changes directly from teammate stashing changes temporarily reset to prior commit (in case of FUBAR)
  • 19. some cool tools for your Git utility belt git reset git cherry-pick git stash git bisect git add -p git re鍖og git svn
  • 20. get Git info http://ProGit.org (the site for THE book) http://gitready.com http://gitcasts.com http://whygitisbetterthanx.com/ http://delicious.com/stevenharman/git
  • 21. fork these slides from http://github.com/stevenharman/git-敬看姻一鍖o敬s steven harman twitter: stevenharman http://stevenharman.net

Editor's Notes

  1. \n
  2. git is awesome - if you’re using it, you know. if not, don’t be scared, give it a try.\n
  3. don’t be scared, it’s not as bad as it looks.\n
  4. \n
  5. let’s assume there already exists a Git repository somewhere in the cloud. like maybe... The GitHub.\n
  6. start by cloning a copy of that remote repository (conventionally known as “origin”) to our local machine.\n
  7. we need to work a sweet new feature. step 1) create a local branch to work in. step 2) hackity-hack-hack. step 3) commit the changes. [repeat steps 2 & 3 as necessary]\n
  8. a teammate, or maybe even another you, has pushed some new changes.\n
  9. [still continuing steps 2 & 3 from earlier]\n
  10. get any new changes that are on the remote, but not local.\n
  11. merge the changes from the remote “master” branch into our local “master” branch. because there are no divergent changes on our local master, this is a “fast-forward merge” along the master’s graph.\n
  12. now we need to merge our feature into “master” so we can release it. \n\noption 1) merge feature in. [keeps all info, but we end up with a noisy history graph that’s hard to follow]\n
  13. OR [go back to just after we merged in the fetched changes]\n
  14. option 2) rebase our “feature” branch on top of “master”.\n\nthis “rewinds” our branch back to where it started, then “fast-forwards” along “master”, and finally re-applies each of our change sets. afterward, our local commits have a new SHA1 hash, meaning they are different objects than before rebase, however, the original committer info & meta-data are preserved.\n
  15. now we can merge our changes into “master.” because we already have all of the changes that exist in “master,” this results in a “fast-forward” merge onto “master”.\n
  16. finally we share our sweet, sweet bacon with the rest of the world by pushing our local changes to the remote (origin).\n
  17. now everyone can enjoy the bacony-goodness!\n
  18. \n
  19. add -p to interactively stage hunks of a file change.\n
  20. \n
  21. feel free to hit me up with any questions.\n