1425596551 -0500
502 |
503 | b4
504 | ```
505 |
506 | Notice that the commit has two parents.
507 |
508 | Eighth, Git points the current branch, `deputy`, at the new commit.
509 |
510 |
511 | `b4`, the merge commit resulting from the recursive merge of `a4` into `b3`
512 |
513 | ## Merge two commits in different lineages that both modify the same file
514 |
515 | ```bash
516 | ~/alpha $ printf '5' > data/number.txt
517 | ~/alpha $ git add data/number.txt
518 | ~/alpha $ git commit -m 'b5'
519 | [deputy 15b9e42] b5
520 | ```
521 |
522 | The user sets the content of `data/number.txt` to `5` and commits the change to `deputy`.
523 |
524 | ```bash
525 | ~/alpha $ git checkout master
526 | Switched to branch 'master'
527 | ~/alpha $ printf '6' > data/number.txt
528 | ~/alpha $ git add data/number.txt
529 | ~/alpha $ git commit -m 'b6'
530 | [master 6deded9] b6
531 | ```
532 |
533 | The user checks out `master`. They set the content of `data/number.txt` to `6` and commit the change to `master`.
534 |
535 |
536 | `b6` commit on `master`
537 |
538 | ```bash
539 | ~/alpha $ git merge deputy
540 | CONFLICT in data/number.txt
541 | Automatic merge failed; fix conflicts and then
542 | commit the result.
543 | ```
544 |
545 | The user merges `deputy` into `master`. There is a conflict and the merge is paused. The process for a conflicted merge follows the same first six steps as the process for an unconflicted merge: set `alpha/.git/MERGE_HEAD`, find the base commit, generate the indices of the base, receiver and giver commits, create a diff, update the index and update the working copy. Because of the conflict, steps four, five and six have different outcomes. Because of the conflict, the seventh commit step and eighth ref update step are never taken. Let's go through the steps again and see what happened.
546 |
547 | First, Git writes the hash of the giver commit to a file at `alpha/.git/MERGE_HEAD`.
548 |
549 |
550 | `MERGE_HEAD` written during merge of `b5` into `b6`
551 |
552 | Second, Git finds the base commit.
553 |
554 | Third, Git generates the indices for the base, receiver and giver commits.
555 |
556 | Those steps are the same as before.
557 |
558 | Fourth, Git creates a diff that contains the changes required to go from the receiver commit to the giver commit. In this case, the diff contains only one entry: `data/number.txt`. Because the content for `data/number.txt` is different in the receiver, giver and base, the entry is marked as a conflict.
559 |
560 | Fifth, the changes indicated by the entries in the diff are applied to the index. Entries in the index are uniquely identified by a combination of their file path and stage. The entry for an unconflicted file has a stage of `0`. Before this merge, the index looked like this, where `0` is the stage:
561 |
562 | ```
563 | 0 data/letter.txt 63d8dbd40c23542e740659a7168a0ce3138ea748
564 | 0 data/number.txt 62f9457511f879886bb7728c986fe10b0ece6bcb
565 | ```
566 |
567 | After the merge diff is written to the index, the index looks like this:
568 |
569 | ```
570 | 0 data/letter.txt 63d8dbd40c23542e740659a7168a0ce3138ea748
571 | 1 data/number.txt bf0d87ab1b2b0ec1a11a3973d2845b42413d9767
572 | 2 data/number.txt 62f9457511f879886bb7728c986fe10b0ece6bcb
573 | 3 data/number.txt 7813681f5b41c028345ca62a2be376bae70b7f61
574 | ```
575 |
576 | The entry for `data/letter.txt` at stage `0` is the same as it was before the merge. The entry for `data/number.txt` at stage `0` is gone. There are three new entries in its place. The entry for stage `1` has the hash of the `data/number.txt` content from the base commit. The entry for stage `2` has the hash of the `data/number.txt` content from the receiver commit. The entry for stage `3` has the hash of the `data/number.txt` content from the giver commit. The presence of these three entries tells Git that `data/number.txt` is in conflict.
577 |
578 | Sixth, the changes indicated by the entries in the diff are applied to the working copy. For a conflict, Git writes both versions to the file in the working copy. The content of `data/number.txt` is set to:
579 |
580 | ```
581 | <<<<<<< HEAD
582 | 6
583 | =======
584 | 5
585 | >>>>>>> deputy
586 | ```
587 |
588 | The merge pauses here.
589 |
590 | ```bash
591 | ~/alpha $ printf '13' > data/number.txt
592 | ~/alpha $ git add data/number.txt
593 | ```
594 |
595 | The user integrates the content of the two conflicting versions by setting the content of `data/number.txt` to `13`. They add the file to the index. Adding a conflicted file tells Git that the conflict is resolved. Git removes the `data/number.txt` entries for stages `1`, `2` and `3` from the index. It adds a blob containing the `13`, the new content of `data/number.txt`. It adds adds an entry for `data/number.txt` at stage `0` with the hash of the new blob. The index now reads:
596 |
597 | ```
598 | 0 data/letter.txt 63d8dbd40c23542e740659a7168a0ce3138ea748
599 | 0 data/number.txt ca7bf83ac53a27a2a914bed25e1a07478dd8ef47
600 | ```
601 |
602 | ```bash
603 | ~/alpha $ git commit -m 'b13'
604 | [master 28118a0] b13
605 | ```
606 |
607 | Seventh, the user commits. Git sees `alpha/.git/MERGE_HEAD` in the repository, which tells it that a merge is in progress. It checks the index and finds there are no conflicts. It creates a new commit, `b13`, to record the content of the resolved merge. It deletes the file at `alpha/.git/MERGE_HEAD`. This completes the merge.
608 |
609 | Eighth, Git points the current branch, `master`, at the new commit.
610 |
611 |
612 | `b4`, the merge commit resulting from the conflicted, recursive merge of `b5` into `b6`
613 |
614 | ## Remove a file
615 |
616 | A diagram of the Git graph that includes the trees and blobs for the current commit, the working copy and index:
617 |
618 |
619 | `b13` commit with associated trees, and working copy and index
620 |
621 | ```bash
622 | ~/alpha $ git rm data/letter.txt
623 | rm 'data/letter.txt'
624 | ```
625 |
626 | The user tells Git to remove the `data/letter.txt` file.
627 |
628 | First, `data/letter.txt` is deleted from the working copy.
629 |
630 | Second, the entry for `data/letter.txt` is deleted from the index.
631 |
632 |
633 | After `data/letter.txt` `rm`ed from working copy and index
634 |
635 | ```bash
636 | ~/alpha $ git commit -m '13'
637 | [master 836b25c] 13
638 | ```
639 |
640 | The user commits. As part of the commit, as always, Git builds a tree graph that represents the content of the index. Because `data/letter.txt` is not in the index, it is not included in the tree graph.
641 |
642 |
643 | `13` commit made after `data/letter.txt` `rm`ed
644 |
645 | ## Copy a repository
646 |
647 | ```bash
648 | ~/alpha $ cd ..
649 | ~ $ cp -r alpha bravo
650 | ```
651 |
652 | The user copies the contents of the `alpha/` repository to the `bravo/` directory. This produces the following directory structure:
653 |
654 | ```
655 | alpha
656 | └── data
657 | └── letter.txt
658 | └── number.txt
659 | bravo
660 | └── data
661 | └── letter.txt
662 | └── number.txt
663 | ```
664 |
665 | There is now another Git graph:
666 |
667 |
668 | New graph created when `alpha` `cp`ed to `bravo`
669 |
670 | ## Link a repository ta another repository
671 |
672 | ```bash
673 | ~ $ cd alpha
674 | ~/alpha $ git remote add bravo ../bravo
675 | ```
676 |
677 | The user moves back into the `alpha` repository. They set up `bravo` as a remote repository on `alpha`. This adds some lines to the file at `alpha/.git/config`:
678 |
679 | ```
680 | [remote "bravo"]
681 | url = ../bravo/
682 | ```
683 |
684 | These lines specify that there is a remote repository called `bravo` in the directory at `../bravo`.
685 |
686 | ## Fetch a branch from a remote
687 |
688 | ```bash
689 | ~/alpha $ cd ../bravo
690 | ~/bravo $ printf '14' > data/number.txt
691 | ~/bravo $ git add data/number.txt
692 | ~/bravo $ git commit -m '14'
693 | [master 6764cd8] 14
694 | ```
695 |
696 | The user goes into the `bravo` repository. They set the content of `data/number.txt` to `14` and commit the change to `master` on `bravo`.
697 |
698 |
699 | `14` commit on `bravo` repository
700 |
701 | ```bash
702 | ~/bravo $ cd ../alpha
703 | ~/alpha $ git fetch bravo master
704 | Unpacking objects: 100%
705 | From ../bravo
706 | * branch master -> FETCH_HEAD
707 | ```
708 |
709 | The user goes into the `alpha` repository. They fetch `master` from `bravo` into `alpha`. This process has four steps.
710 |
711 | First, Git gets the hash of the commit that master is pointing at on `bravo`. This is the hash of the `14` commit.
712 |
713 | Second, Git makes a list of all the objects that the `14` commit depends on: the commit itself, the objects in its tree graph, the ancestor commits of the `14` commit and the objects in their tree graphs. It copies all the objects that are in this list but that `alpha` does not have to `alpha/.git/objects/`.
714 |
715 | Third, the content of the concrete ref file at `alpha/.git/refs/remotes/bravo/master` is set to the hash of the `14` commit.
716 |
717 | Fourth, the content of `alpha/.git/FETCH_HEAD` is set to:
718 |
719 | ```
720 | 132c6a5ba1bb9e0d89c45dc50ba4553f5edd19dc branch 'master' of ../bravo
721 | ```
722 |
723 | This indicates that the most recent fetch command fetched the `14` commit of `master` from `bravo`.
724 |
725 |
726 | `alpha` after `bravo/master` fetched
727 |
728 | Graph property: objects can be copied. Git behavior: history can be shared between repositories.
729 |
730 | Graph property: a repository can store remote branch refs like `alpha/.git/refs/remotes/bravo/master`. Git behavior: a repository can have a record of the state of a branch on a remote repository. Though correct at the time it is fetched, it will go out of date if the remote branch changes.
731 |
732 | ## Merge FETCH_HEAD
733 |
734 | ```bash
735 | ~/alpha $ git merge FETCH_HEAD
736 | Updating 836b25c..6764cd8
737 | Fast-forward
738 | ```
739 |
740 | The user merges `FETCH_HEAD`. `FETCH_HEAD` is just another ref. It resolves to the `14` commit, the giver. `HEAD` points at the `13` commit, the receiver. Git does a fast-forward merge and points `master` at the `14` commit.
741 |
742 |
743 | `alpha` after `FETCH_HEAD` merged
744 |
745 | ## Pull a branch from a remote
746 |
747 | ```bash
748 | ~/alpha $ git pull bravo master
749 | Already up-to-date.
750 | ```
751 |
752 | The user pulls `master` from `bravo` into `alpha`. Pulling is shorthand for fetching and merging `FETCH_HEAD`. Git does these two commands and reports that `master` is `Already up-to-date`.
753 |
754 | ## Clone a repository
755 |
756 | ```bash
757 | ~/alpha $ cd ..
758 | ~ $ git clone alpha charlie
759 | Cloning into 'charlie'
760 | ```
761 |
762 | The user moves into the directory above. They clone `alpha` to `charlie`. Cloning to `charlie` has similar results to the `cp` the user did to produce the `bravo` repository. Git creates a new directory called `charlie`. After that, it inits `charlie` as a Git repo, adds `alpha` as a remote called `origin`, fetches `origin` and merges `FETCH_HEAD`.
763 |
764 | ## Push a branch to a checked out branch on a remote
765 |
766 | ```bash
767 | ~ $ cd alpha
768 | ~/alpha $ printf '15' > data/number.txt
769 | ~/alpha $ git add data/number.txt
770 | ~/alpha $ git commit -m '15'
771 | [master 8b35db5] 15
772 | ```
773 |
774 | The user goes back into the `alpha` repository. They set the content of `data/number.txt` to `15` and commit the change to `master` on `alpha`.
775 |
776 | ```bash
777 | ~/alpha $ git remote add charlie ../charlie
778 | ```
779 |
780 | They set up `charlie` as a remote repository on `alpha`.
781 |
782 | ```bash
783 | ~/alpha $ git push charlie master
784 | Writing objects: 100%
785 | remote error: refusing to update checked out
786 | branch: refs/heads/master because it will make
787 | the index and work tree inconsistent
788 | ```
789 |
790 | They push `master` to `charlie`.
791 |
792 | All the objects required for the `15` commit on the `master` branch are copied to `charlie`.
793 |
794 | At this point, the push process stops. Git, as ever, tells the user what went wrong. It refuses to push to a branch that is checked out on the remote. This makes sense. A push will update the current commit and index of the remote. This will cause confusion if someone is editing the working copy on the remote.
795 |
796 | At this point, the user could make a new branch and push that branch to `charlie`. But, really, they want a repository that they can push to whenever they want. They want a central repository that they can push to and pull from, but that no one commits to directly. They want something like a GitHub remote. They want a bare repository.
797 |
798 | ## Clone a bare repository
799 |
800 | ```bash
801 | ~/alpha $ cd ..
802 | ~ $ git clone alpha delta --bare
803 | Cloning into bare repository 'delta'
804 | ```
805 |
806 | The user clones `delta` as a bare repository. This is an ordinary clone with two differences. The `config` file indicates the repository is bare. And the files that are normally stored in the `.git` directory are stored in the top of the repository:
807 |
808 | ```
809 | delta
810 | ├── HEAD
811 | ├── config
812 | ├── objects
813 | └── refs
814 | ```
815 |
816 |
817 | `alpha` and `delta` graphs after `alpha` cloned to `delta`
818 |
819 | ## Push a branch to a bare repository
820 |
821 | ```bash
822 | ~ $ cd alpha
823 | ~/alpha $ git remote add delta ../delta
824 | ```
825 |
826 | The user goes back into the `alpha` repository. They set up `delta` as a remote repository on `alpha`.
827 |
828 | ```bash
829 | ~/alpha $ printf '16' > data/number.txt
830 | ~/alpha $ git add data/number.txt
831 | ~/alpha $ git commit -m '16'
832 | [master 02d1bb2] 16
833 | ```
834 |
835 | They set the content of `data/number.txt` to `16` and commit the change to `master` on `alpha`.
836 |
837 |
838 | `16` commit on `alpha`
839 |
840 | ```bash
841 | ~/alpha $ git push delta master
842 | Writing objects: 100%
843 | To ../delta
844 | 8b35db5..02d1bb2 master -> master
845 | ```
846 |
847 | They push `master` to `delta`. Pushing has three steps.
848 |
849 | First, all the objects required for the `16` commit on the `master` branch are copied from `alpha/.git/objects/` to `delta/.git/objects/`.
850 |
851 | Second, `refs/heads/master` is updated on `delta` to point at the `16` commit.
852 |
853 | Third, `alpha/.git/refs/remotes/delta/master` is set to point at the `16` commit. This means `alpha` has an up to date record of the state of `delta`.
854 |
855 |
856 | `16` commit pushed from `alpha` to `delta`
857 |
858 | ## Summary
859 |
860 | Git is built on a graph. Almost every Git command manipulates this graph. To understand Git deeply, focus on the properties of this graph, not workflows or commands.
861 |
862 | To learn more about Git, investigate the `.git` directory. It's not scary. Look inside. Change the content of files and see what happens. Create a commit by hand. Try and see how badly you can mess up a repo. Then repair it.
863 |
864 | [^1]: In this case, the hash is longer than the original content. But, all pieces of content longer than the number of characters in a hash will be expressed more concisely than the original.
865 |
866 | [^2]: There is a chance that two different pieces of content will hash to the same value. But this chance is low.
867 |
868 | [^3]: Content can be lost if the runs `git prune`. This command deletes all objects that cannot be reached from a ref.
869 |
870 | [^4]: `git stash` stores all the differences between the working copy and the current commit in a safe place from which they can be retrieved later.
871 |
872 | [^5]: The `rebase` command can be used to add, edit and delete commits in the history.
873 |
--------------------------------------------------------------------------------
/gitfromtheinsideout/images/1-a1-tree-graph.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maryrosecook/DEPRECATED-essays/83c31fcd57ec5a9ad4642cda01df1f4b5809936d/gitfromtheinsideout/images/1-a1-tree-graph.png
--------------------------------------------------------------------------------
/gitfromtheinsideout/images/10-a3-detached-head.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maryrosecook/DEPRECATED-essays/83c31fcd57ec5a9ad4642cda01df1f4b5809936d/gitfromtheinsideout/images/10-a3-detached-head.png
--------------------------------------------------------------------------------
/gitfromtheinsideout/images/11-a3-on-deputy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maryrosecook/DEPRECATED-essays/83c31fcd57ec5a9ad4642cda01df1f4b5809936d/gitfromtheinsideout/images/11-a3-on-deputy.png
--------------------------------------------------------------------------------
/gitfromtheinsideout/images/12-a3-on-master-on-a2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maryrosecook/DEPRECATED-essays/83c31fcd57ec5a9ad4642cda01df1f4b5809936d/gitfromtheinsideout/images/12-a3-on-master-on-a2.png
--------------------------------------------------------------------------------
/gitfromtheinsideout/images/13-a3ondeputy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maryrosecook/DEPRECATED-essays/83c31fcd57ec5a9ad4642cda01df1f4b5809936d/gitfromtheinsideout/images/13-a3ondeputy.png
--------------------------------------------------------------------------------
/gitfromtheinsideout/images/14-a3-on-master-on-a2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maryrosecook/DEPRECATED-essays/83c31fcd57ec5a9ad4642cda01df1f4b5809936d/gitfromtheinsideout/images/14-a3-on-master-on-a2.png
--------------------------------------------------------------------------------
/gitfromtheinsideout/images/15-a3-on-master.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maryrosecook/DEPRECATED-essays/83c31fcd57ec5a9ad4642cda01df1f4b5809936d/gitfromtheinsideout/images/15-a3-on-master.png
--------------------------------------------------------------------------------
/gitfromtheinsideout/images/16-a4-b3-on-deputy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maryrosecook/DEPRECATED-essays/83c31fcd57ec5a9ad4642cda01df1f4b5809936d/gitfromtheinsideout/images/16-a4-b3-on-deputy.png
--------------------------------------------------------------------------------
/gitfromtheinsideout/images/17-a4-b3-on-deputy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maryrosecook/DEPRECATED-essays/83c31fcd57ec5a9ad4642cda01df1f4b5809936d/gitfromtheinsideout/images/17-a4-b3-on-deputy.png
--------------------------------------------------------------------------------
/gitfromtheinsideout/images/18-b4-on-deputy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maryrosecook/DEPRECATED-essays/83c31fcd57ec5a9ad4642cda01df1f4b5809936d/gitfromtheinsideout/images/18-b4-on-deputy.png
--------------------------------------------------------------------------------
/gitfromtheinsideout/images/19-b6-on-master.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maryrosecook/DEPRECATED-essays/83c31fcd57ec5a9ad4642cda01df1f4b5809936d/gitfromtheinsideout/images/19-b6-on-master.png
--------------------------------------------------------------------------------
/gitfromtheinsideout/images/2-a1-commit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maryrosecook/DEPRECATED-essays/83c31fcd57ec5a9ad4642cda01df1f4b5809936d/gitfromtheinsideout/images/2-a1-commit.png
--------------------------------------------------------------------------------
/gitfromtheinsideout/images/20-b6-on-master-with-merge-head.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maryrosecook/DEPRECATED-essays/83c31fcd57ec5a9ad4642cda01df1f4b5809936d/gitfromtheinsideout/images/20-b6-on-master-with-merge-head.png
--------------------------------------------------------------------------------
/gitfromtheinsideout/images/21-b13-on-master.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maryrosecook/DEPRECATED-essays/83c31fcd57ec5a9ad4642cda01df1f4b5809936d/gitfromtheinsideout/images/21-b13-on-master.png
--------------------------------------------------------------------------------
/gitfromtheinsideout/images/22-b13-with-objects-wc-and-index.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maryrosecook/DEPRECATED-essays/83c31fcd57ec5a9ad4642cda01df1f4b5809936d/gitfromtheinsideout/images/22-b13-with-objects-wc-and-index.png
--------------------------------------------------------------------------------
/gitfromtheinsideout/images/23-b13-letter-removed-from-wc-and-index.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maryrosecook/DEPRECATED-essays/83c31fcd57ec5a9ad4642cda01df1f4b5809936d/gitfromtheinsideout/images/23-b13-letter-removed-from-wc-and-index.png
--------------------------------------------------------------------------------
/gitfromtheinsideout/images/24-13.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maryrosecook/DEPRECATED-essays/83c31fcd57ec5a9ad4642cda01df1f4b5809936d/gitfromtheinsideout/images/24-13.png
--------------------------------------------------------------------------------
/gitfromtheinsideout/images/25-13-cp-alpha-to-bravo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maryrosecook/DEPRECATED-essays/83c31fcd57ec5a9ad4642cda01df1f4b5809936d/gitfromtheinsideout/images/25-13-cp-alpha-to-bravo.png
--------------------------------------------------------------------------------
/gitfromtheinsideout/images/26-14-bravo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maryrosecook/DEPRECATED-essays/83c31fcd57ec5a9ad4642cda01df1f4b5809936d/gitfromtheinsideout/images/26-14-bravo.png
--------------------------------------------------------------------------------
/gitfromtheinsideout/images/27-14-fetched-to-alpha.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maryrosecook/DEPRECATED-essays/83c31fcd57ec5a9ad4642cda01df1f4b5809936d/gitfromtheinsideout/images/27-14-fetched-to-alpha.png
--------------------------------------------------------------------------------
/gitfromtheinsideout/images/28-14-merged-to-alpha.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maryrosecook/DEPRECATED-essays/83c31fcd57ec5a9ad4642cda01df1f4b5809936d/gitfromtheinsideout/images/28-14-merged-to-alpha.png
--------------------------------------------------------------------------------
/gitfromtheinsideout/images/29-15-alpha-cloned-to-delta-bare.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maryrosecook/DEPRECATED-essays/83c31fcd57ec5a9ad4642cda01df1f4b5809936d/gitfromtheinsideout/images/29-15-alpha-cloned-to-delta-bare.png
--------------------------------------------------------------------------------
/gitfromtheinsideout/images/3-a1-refs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maryrosecook/DEPRECATED-essays/83c31fcd57ec5a9ad4642cda01df1f4b5809936d/gitfromtheinsideout/images/3-a1-refs.png
--------------------------------------------------------------------------------
/gitfromtheinsideout/images/30-16-alpha.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maryrosecook/DEPRECATED-essays/83c31fcd57ec5a9ad4642cda01df1f4b5809936d/gitfromtheinsideout/images/30-16-alpha.png
--------------------------------------------------------------------------------
/gitfromtheinsideout/images/31-16-pushed-to-delta.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maryrosecook/DEPRECATED-essays/83c31fcd57ec5a9ad4642cda01df1f4b5809936d/gitfromtheinsideout/images/31-16-pushed-to-delta.png
--------------------------------------------------------------------------------
/gitfromtheinsideout/images/4-a1-wc-and-index.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maryrosecook/DEPRECATED-essays/83c31fcd57ec5a9ad4642cda01df1f4b5809936d/gitfromtheinsideout/images/4-a1-wc-and-index.png
--------------------------------------------------------------------------------
/gitfromtheinsideout/images/5-a1-wc-number-set-to-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maryrosecook/DEPRECATED-essays/83c31fcd57ec5a9ad4642cda01df1f4b5809936d/gitfromtheinsideout/images/5-a1-wc-number-set-to-2.png
--------------------------------------------------------------------------------
/gitfromtheinsideout/images/6-a1-wc-and-index-number-set-to-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maryrosecook/DEPRECATED-essays/83c31fcd57ec5a9ad4642cda01df1f4b5809936d/gitfromtheinsideout/images/6-a1-wc-and-index-number-set-to-2.png
--------------------------------------------------------------------------------
/gitfromtheinsideout/images/7-a2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maryrosecook/DEPRECATED-essays/83c31fcd57ec5a9ad4642cda01df1f4b5809936d/gitfromtheinsideout/images/7-a2.png
--------------------------------------------------------------------------------
/gitfromtheinsideout/images/8-a2-just-objects-commits-and-refs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maryrosecook/DEPRECATED-essays/83c31fcd57ec5a9ad4642cda01df1f4b5809936d/gitfromtheinsideout/images/8-a2-just-objects-commits-and-refs.png
--------------------------------------------------------------------------------
/gitfromtheinsideout/images/9-a2-detached-head.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maryrosecook/DEPRECATED-essays/83c31fcd57ec5a9ad4642cda01df1f4b5809936d/gitfromtheinsideout/images/9-a2-detached-head.png
--------------------------------------------------------------------------------