basically finished up the branching section
Scott Chacon committed
Jun 4, 2010 at 16:37 UTC
8195eb02e132c90ed7a5e6575d9b4707fa2ab1a5
2 files changed
+95
-2
_layouts/reference.html
-1
@@ -61,7 +61,6 @@
61
<li><a href="/branching/#branch">checkout</a></li>
62
<li><a href="/branching/#merge">merge</a></li>
63
<li><a href="/branching/#log">log</a></li>
64
- <li><a href="/branching/#reset">reset</a></li>
64
</ul>
65
</div>
66
branching/index.html
+95
-1
@@ -584,7 +584,101 @@ b7ae93b added from ruby
584
branch, do some work in it and then switch back and do some work in our
585
master branch, then see how the <code>log</code> command can help us figure
586
out what is happening on each.</p>
587
-
587
+
588
+ <p>First we'll create a new branch to add the Erlang programming language
589
+ Hello World example - we want to do this in a branch so that we don't
590
+ muddy up our stable branch with code that may not work for a while so we
591
+ can cleanly switch in and out of it.</p>
592
+
593
+<pre>
594
+<b>$ git checkout -b erlang</b>
595
+Switched to a new branch 'erlang'
596
+<b>$ vim erlang_hw.erl</b>
597
+<b>$ git add erlang_hw.erl </b>
598
+<b>$ git commit -m 'added erlang'</b>
599
+[erlang ab5ab4c] added erlang
600
+ 1 files changed, 5 insertions(+), 0 deletions(-)
601
+ create mode 100644 erlang_hw.erl
602
+</pre>
603
+
604
+ <p>Since we're having fun playing in functional programming languages we
605
+ get caught up in it and also add a Haskell example program while still in
606
+ the branch named 'erlang'.</p>
607
+
608
+<pre>
609
+<b>$ vim haskell.hs</b>
610
+<b>$ git add haskell.hs </b>
611
+<b>$ git commit -m 'added haskell'</b>
612
+[erlang 1834130] added haskell
613
+ 1 files changed, 4 insertions(+), 0 deletions(-)
614
+ create mode 100644 haskell.hs
615
+</pre>
616
+
617
+ <p>Finally, we decide that we want to change the class name of our Ruby
618
+ program back to the way it was. So, we can go back to the master branch
619
+ and change that and we decide to just commit it directly in the master
620
+ branch instead of creating another branch.</p>
621
+
622
+<pre>
623
+<b>$ git checkout master</b>
624
+Switched to branch 'master'
625
+<b>$ ls</b>
626
+README ruby.rb
627
+<b>$ vim ruby.rb </b>
628
+<b>$ git commit -am 'reverted to old class name'</b>
629
+[master 594f90b] reverted to old class name
630
+ 1 files changed, 2 insertions(+), 2 deletions(-)
631
+</pre>
632
+
633
+ <p>So, now say we don't work on the project for a while, we have other
634
+ things to do. When we come back we want to know what the 'erlang' branch
635
+ is all about and where we've left off on the master branch. Just by looking
636
+ at the branch name, we can't know that we made Haskell changes in there, but
637
+ using <code>git log</code> we easily can. If you give Git a branch name,
638
+ it will show you just the commits that are "reachable" in the history of
639
+ that branch, that is the commits that influenced the final snapshot.</p>
640
+
641
+<pre>
642
+<b>$ git log --oneline erlang</b>
643
+<span class="hl">1834130 added haskell</span>
644
+ab5ab4c added erlang
645
+8d585ea Merge branch 'fix_readme'
646
+3cbb6aa fixed readme title differently
647
+3ac015d fixed readme title
648
+558151a Merge branch 'change_class'
649
+b7ae93b added from ruby
650
+3467b0a changed the class name
651
+17f4acf first commit
652
+</pre>
653
+
654
+ <p>This way, it's pretty easy to see that we have Haskell code included in
655
+ the branch (as I've highlighted). What is even cooler is that we can
656
+ easily tell Git that we only are interested in the commits that are
657
+ reachable in one branch that are not reachable in another, in other words
658
+ which commits are unique to a branch in comparison to another.
659
+ </p>
660
+
661
+ <p>
662
+ In this case if we are interested in merging in the 'erlang' branch we
663
+ want to see what commits are going to effect our snapshot when we do
664
+ that merge. The way we tell Git that is by putting a <code>^</code> in
665
+ front of the branch that we don't want to see. For instance, if we want
666
+ to see the commits that are in the 'erlang' branch that are not in the
667
+ 'master' branch, we can do <code>erlang ^master</code>, or vice versa.
668
+ </p>
669
+
670
+<pre>
671
+<b>$ git log --oneline erlang ^master</b>
672
+1834130 added haskell
673
+ab5ab4c added erlang
674
+<b>$ git log --oneline master ^erlang</b>
675
+594f90b reverted to old class name
676
+</pre>
677
+
678
+ <p>This gives us a nice, simple branch management tool. It allows us to
679
+ easily see what commits are unique to which branches so we know what
680
+ we're missing and what we would be merging in if we were to do a merge.
681
+ </p>
682
683
<p class="nutshell">
684
<b>In a nutshell</b> you use <code>git log</code> to list out the commit