started in on log
Scott Chacon committed
Jun 4, 2010 at 15:43 UTC
4c00709b2b5d3b59ae355bae53c815753b438e2f
2 files changed
+134
-1
branching/index.html
+133
-1
@@ -458,10 +458,142 @@ M README
458
</pre>
459
460
<p>And now we've successfully resolved our merge conflict and committed
461
- the result.</p>
461
+ the result.</p>
462
+
463
+ <p class="nutshell">
464
+ <b>In a nutshell</b> you use <code>git merge</code> to combine another
465
+ branch context into your current branch. It automatically figures out
466
+ how to best combine the different snapshots into a new snapshot with the
467
+ unique work of both.
468
+ </p>
469
470
</div>
471
+</div>
472
+
473
+<div class="box">
474
+ <h2>
475
+ <span class="docs">
476
+ <a target="new" href="http://www.kernel.org/pub/software/scm/git/docs/git-log.html">docs</a>
477
+ <a target="new" href="http://progit.org/book/">book</a>
478
+ </span>
479
+ <a name="branch">git log</a>
480
+ <span class="desc">show commit history of a branch</span>
481
+ </h2>
482
+
483
+ <div class="block">
484
+
485
+ <p>So far we have been committing snapshots of your project and switching
486
+ between different isolated contexts, but what if we've forgotten how we've
487
+ got to where we are? Or what if we want to know how one branch differs
488
+ from another? Git provides a tool that shows you all the commit messages
489
+ that have lead up to the snapshot you are currently on, which is called
490
+ <code>git log</code>.</p>
491
+
492
+ <p>To understand the log command, you have to understand what information
493
+ is stored when you run the <code>git commit</code> command to store a
494
+ snapshot. In addition to the manifest of files and commit message and
495
+ information about the person who committed it, Git also stores the commit
496
+ that you based this snapshot on. That is, if you clone a project, what was
497
+ the snapshot that you modified to get to the snapshot that you saved? This
498
+ is helpful to give context to how the project got to where it is and allows
499
+ Git to figure out who changed what. If Git has the snapshot you save and
500
+ the one you based it on, then it can automatically figure out what you
501
+ changed. The commit that a new commit was based on is called the "parent".
502
+ </p>
503
+
504
+ <p>To see a chronological list of the parents of any branch, you can run
505
+ <code>git log</code> when you are in that branch. For example, if we run
506
+ <code>git log</code> in the Hello World project that we have been working
507
+ on in this section, we'll see all the commit messages that we've done.
508
+
509
+<pre>
510
+<b>$ git log</b>
511
+<span class="yellow">commit 8d585ea6faf99facd39b55d6f6a3b3f481ad0d3d</span>
512
+Merge: 3cbb6aa 3ac015d
513
+Author: Scott Chacon <schacon@gmail.com>
514
+Date: Fri Jun 4 12:59:47 2010 +0200
515
+
516
+ Merge branch 'fix_readme'
517
+
518
+ Conflicts:
519
+ README
520
+
521
+<span class="yellow">commit 3cbb6aae5c0cbd711c098e113ae436801371c95e</span>
522
+Author: Scott Chacon <schacon@gmail.com>
523
+Date: Fri Jun 4 12:58:53 2010 +0200
524
525
+ fixed readme title differently
526
+
527
+<span class="yellow">commit 3ac015da8ade34d4c7ebeffa2053fcac33fb495b</span>
528
+Author: Scott Chacon <schacon@gmail.com>
529
+Date: Fri Jun 4 12:58:36 2010 +0200
530
+
531
+ fixed readme title
532
+
533
+<span class="yellow">commit 558151a95567ba4181bab5746bc8f34bd87143d6</span>
534
+Merge: b7ae93b 3467b0a
535
+Author: Scott Chacon <schacon@gmail.com>
536
+Date: Fri Jun 4 12:37:05 2010 +0200
537
+
538
+ Merge branch 'change_class'
539
+...
540
+</pre>
541
+
542
+ <p>To see a more compact version of the same history, we can use the
543
+ <code>--oneline</code> option.</p>
544
+
545
+<pre>
546
+<b>$ git log --oneline</b>
547
+8d585ea Merge branch 'fix_readme'
548
+3cbb6aa fixed readme title differently
549
+3ac015d fixed readme title
550
+558151a Merge branch 'change_class'
551
+b7ae93b added from ruby
552
+3467b0a changed the class name
553
+17f4acf first commit
554
+</pre>
555
+
556
+ <p>What this is telling us is that this is the history of the development
557
+ of this project. If the commit messages are descriptive, this can inform
558
+ us as to what all changes have been applied or have influenced the current
559
+ state of the snapshot and thus what is in it.</p>
560
+
561
+ <p>We can also use it to see when the history was branched and merged with
562
+ the very helpful <code>--graph</code> option. Here is the same command
563
+ but with the topology graph turned on:</p>
564
+
565
+<pre>
566
+<b>$ git log --oneline --graph</b>
567
+* 8d585ea Merge branch 'fix_readme'
568
+|\
569
+| * 3ac015d fixed readme title
570
+* | 3cbb6aa fixed readme title differently
571
+|/
572
+* 558151a Merge branch 'change_class'
573
+|\
574
+| * 3467b0a changed the class name
575
+* | b7ae93b added from ruby
576
+|/
577
+* 17f4acf first commit
578
+</pre>
579
+
580
+ <p>Now we can more clearly see when effort diverged and then was merged
581
+ back together. This is very nice for seeing what has happened or what
582
+ changes are applied, but
583
+ it is also incredibly useful for managing your branches. Let's create a new
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
+
588
+
589
+ <p class="nutshell">
590
+ <b>In a nutshell</b> you use <code>git log</code> to list out the commit
591
+ history or list of changes people have made that have lead to the snapshot
592
+ at the tip of the branch. This allows you to see how the project in that
593
+ context got to the state that it is currently in.
594
+ </p>
595
+
596
+ </div>
597
</div>
598
599
<p><a href="/basic">On to Sharing and Updating Projects »</a></p>
css/layout.css
+1
@@ -58,6 +58,7 @@ pre b { color: #111; }
58
.umber { color: #8A3324; }
59
.lblue { color: #55a; }
60
.blue { color: #447; }
61
+.yellow { color: #993; }
62
.hl { background: #eea; }
63
64
.box h4 {