Git Curriculum: independent text review
What was reviewed. git-curriculum.md, revision 1, 2026-10-20: idea map, recorded source statements, shared visual language, and 24 unit cards with scripts. The reviewer did not write it.
How claims were checked.
Sources read: Pro Git 2nd ed. chapters 2.5, 3.6, 10.2, 10.3, 10.7; the Git manual pages git-push, git-gc, gitglossary. The recorded source statements in the curriculum were taken at face value for the chapters not re-read (1.3, 3.1, 3.2, 7.7, git-checkout, git-commit, git-clone, git-cherry-pick, hash-function-transition).
Behaviour checked in a throwaway repository under /tmp/git-review-scratch with git 2.54.0 (Apple Git-157): branch file size, git diff vs git diff --staged after git add, git status headings, reset --soft / default / --hard, reflog entries for commit, reset, amend and checkout, cherry-pick author and message, a commit made in detached HEAD and whether the reflog and gc --prune=now keep it, what git clone copies (reflog, config, branches), whether a plain push sends tags, whether push and fetch move origin/main and log it, who emits the non-fast-forward rejection, fast-forward merge output, the checkout refusal on a dirty file, and whether Git notices a tampered loose blob on read.
Lengths estimated with the brief's formula: words / 2.3 + 0.7 s per line (one sentence = one line) + 1.5 s per beat, screen text excluded.
Classes used for accuracy findings. W = wrong. O = overstated. U = unsupported by the recorded sources (each says whether a source or command output checked by the reviewer does support it). X = cross-unit inconsistency. M = omission that produces a wrong model. Structural flags (metaphor not spoken, screen line over four things, term before definition, ordering, length, two ideas) are listed separately and not counted in the accuracy tally.
---
Series-level findings
These affect more than one unit and are referenced from the unit sections below.
S1 (W, X). Unit 2 beat 5: "Git checks the name every time it reads." Tested: after rewriting the loose blob for c.txt with different content under the same object name, git cat-file -p <name>, git show HEAD:c.txt and git checkout -- c.txt all returned the tampered bytes with exit 0 and no warning. Only git fsck reported hash-path mismatch. Pro Git 1.3 says it is "impossible to change the contents of any file or directory without Git knowing about it", which means tampering is detectable, not that it is detected on every read. The line turns a detectability guarantee into a runtime check that does not exist. Fix: "So nothing can be altered quietly. If the content differs, the name no longer matches, and Git can prove it." Also fix the screen line, which currently shows a cross on read.
S2 (W). Unit 12 beat 5: "Entries expire after about ninety days. Commits nothing points at are removed after that. Before then, everything is recoverable." git-gc manual: gc.reflogExpire "defaults to 90 days", but gc.reflogExpireUnreachable, which governs "reflog entries older than this time and are not reachable from the current tip", "defaults to 30 days". A commit you amended or reset away from is by definition not reachable from the current tip, so the window the unit is promising is about thirty days, not ninety. The idea statement and the calendar screen carry the same error. Fix: say "about a month" (or "thirty days") for lost commits, or drop the number and say "for weeks, not forever".
S3 (W, X). Unit 20 beats 1 and 2: "Everything Git knows lives in one folder. Dot git. Objects, notes, the reflog, settings." then "Clone copies all of it." Tested: the clone's reflog has 1 line where the source has 18; a config value set on the source is absent in the clone; the source's local branches appear only as remotes/origin/*, with one local branch checked out. The git-clone manual (recorded source) says exactly this: "creates remote-tracking branches for each branch... and creates and checks out an initial branch". Beat 2 contradicts unit 12 beat 4 ("not cloned") and unit 21 (your notes versus their bookmarks). Fix beat 2: "Clone copies every object. Every commit, every photo, from the first one. Not just the latest files." and keep the reflog and settings out of beat 1's list, or say "the reflog and settings stay with the folder; clone copies the objects and the notes it needs".
S4 (X). Unit 3 beat 1 "Git stores three kinds of thing" versus unit 24 beat 4 "An annotated tag is an object of its own." gitglossary, object type: "One of the identifiers commit, tree, tag or blob". Pro Git 10.2 says "these three main Git objects", which supports unit 3's simplification but not the unqualified "three kinds". Fix: unit 3 beat 1 "Git stores three main kinds of thing" and unit 24 beat 4 "An annotated tag is a fourth kind of object."
S5 (O, X). Unit 10 beat 4 "Move HEAD away, and nothing does." and unit 11 beat 3 "Nothing points at it any more." Both contradict unit 12 beat 1 ("Every time HEAD or a branch moves, Git writes a line"). Tested: a commit made in detached HEAD, then git checkout main, then git gc --prune=now: the commit is still present, type commit, and git reflog lists it. git-gc: gc keeps "objects referenced by... reflogs (which may reference commits in branches that were later amended or rewound)". The git-checkout manual's "referenced only by HEAD" refers to refs, not reflogs. In the series' vocabulary the honest line is "no note points at it". Fix unit 10 beat 4: "Move HEAD away, and no note does." Fix unit 11 beat 3: "No note points at it any more."
S6 (X). Unit 19 beat 5 "rewrite only commits that have never left your machine" versus unit 23 beat 5 "Use it only on branches that are yours alone." Unit 23 permits force-pushing a branch others can see; unit 19 forbids rewriting anything that was ever pushed. The source (Pro Git 3.6) is the softer rule: "Do not rebase commits that exist outside your repository and that people may have based work on." Fix unit 19 beat 5 to match the source and unit 23: "The rule: rewrite only commits nobody else has built on. Once others have them, add a new commit instead."
S7 (M, ordering). Unit 19 is placed before any unit on other repositories. It says "if someone pulled the old commits" (beat 2), "You push the rewritten ones" (beat 3), "never left your machine", "Once pushed" (beat 5). The viewer at unit 19 has not met a second repository (unit 20), remote-tracking branches (21), fetch and pull (22) or push (23). The idea map lists "needs: 18" and that is incomplete; the unit needs 18, 22 and 23. Fix: move unit 19 to after unit 23 (it then closes the series with unit 24, or sits as 23 with tags last). Nothing in units 20 to 24 depends on 19.
S8 (M). "Staged" is never defined, and unit 9 depends on it. Unit 8 teaches "the index" and "the tray" and never says "staging area" or "staged". Unit 9 beat 3 says "git diff, staged" and beat 5 says "Changes not staged. Changes to be committed." Pro Git 1.3 (recorded): "Its technical name in Git parlance is the 'index', but the phrase 'staging area' works just as well." A viewer who learned "tray" cannot map --staged or the status heading to it. Fix unit 8 beat 2: "The index is the proposed next commit. Git also calls it the staging area. A tray where you lay out exactly what the next photo will hold. Putting a file there is staging it."
S9 (terminology). The visual language names the branch shape "a rounded tag" and HEAD "a smaller tag", and unit 24 then introduces Git tags. Any storyboard note that says "the tag" is ambiguous from unit 24 on. Rename the shape "label" in the shared visual language.
S10 (note, no finding). The recorded hash-function-transition source is never used. Scope promises "the SHA-256 transition beyond one sentence" is out, but the one sentence never appears; unit 2 says "forty hex characters" without qualification. Either add the sentence to unit 2's post or drop the recorded source. "Hex" is also used undefined in unit 2 beat 1; "forty characters" would do.
---
Length table
Estimated spoken length per unit (words / 2.3 + 0.7 s per sentence + 1.5 s per beat). All 24 units have exactly five beats.
Unit | Sentences | Words | Estimate | Card target | Brief target 50 to 70 |
|---|---|---|---|---|---|
1 | 13 | 93 | 57 s | 55 to 70 | in |
2 | 15 | 85 | 55 s | 50 to 65 | in |
3 | 15 | 77 | 51 s | 50 to 60 | in |
4 | 13 | 92 | 57 s | 55 to 65 | in |
5 | 14 | 84 | 54 s | 50 to 65 | in |
6 | 15 | 102 | 62 s | 55 to 70 | in |
7 | 12 | 79 | 50 s | 50 to 60 | at floor |
8 | 15 | 97 | 60 s | 55 to 70 | in |
9 | 12 | 81 | 51 s | 50 to 60 | in |
10 | 11 | 80 | 50 s | 50 to 60 | at floor |
11 | 15 | 95 | 59 s | 55 to 65 | in |
12 | 16 | 81 | 54 s | 50 to 60 | in |
13 | 12 | 90 | 55 s | 55 to 65 | in |
14 | 12 | 66 | 45 s | 45 to 55 | under |
15 | 10 | 78 | 48 s | 45 to 55 | under |
16 | 14 | 81 | 53 s | 50 to 60 | in |
17 | 12 | 82 | 52 s | 50 to 60 | in |
18 | 11 | 82 | 51 s | 50 to 60 | in |
19 | 10 | 87 | 52 s | 50 to 60 | in |
20 | 13 | 80 | 51 s | 50 to 60 | in |
21 | 12 | 79 | 50 s | 50 to 60 | at floor |
22 | 11 | 79 | 50 s | 50 to 60 | at floor |
23 | 11 | 95 | 57 s | 55 to 65 | in |
24 | 11 | 88 | 53 s | 50 to 60 | in |
Total about 21 minutes. Every unit lands inside its own card target. Units 14 and 15 fall under the brief's 50 s floor; unit 14 is the one that feels thin (see its section). No unit is over length, so every fix below can add a sentence without a cut.
---
Unit-by-unit review
Each section answers the guide's seven questions in order: (1) one idea, (2) beats serve it, (3) metaphor, (4) assumptions covered, (5) misconception addressed, (6) length, (7) claims true to source. Then the verdict.
Unit 1: A commit is a photo, not a list of changes
One idea: a commit is a complete snapshot and diffs are computed. Yes.
All five beats serve it.
Photo versus notebook. The script says "photo" and "list of changes"; the notebook is only on screen, which is fine because it is an object, not a label. Beat 4 says the link to an existing copy outright, as the card promises, and stops there.
Assumes nothing. Correct.
"Git stores diffs" is corrected at beats 2 and 5 as stated.
57 s, inside 55 to 70.
All claims match Pro Git 1.3 as recorded. One tension with a later unit: the check question's answer ("nowhere; it is computed") becomes half-true after unit 4 beat 4, where older versions are literally stored as differences inside packs. Not an error in this unit, but the question will be answered "in the pack" by a viewer who has seen unit 4. Suggest: "Git shows you a one-line change between two commits. What does Git actually store: the change, or the two photos?"
Verdict: pass. Optional: reword the check question.
Unit 2: Everything is named by its content
One idea: the name is the hash of the content. Yes.
Beats 1 to 4 serve it. Beat 5 serves it only if its claim is true, and it is not (see 7).
Fingerprint; spoken at beat 2 with the break ("Not of who made it") said once, as the visual language promises.
Assumes nothing. "Hash function" is defined by what it does in beat 1. "Hex" is not defined; say "forty characters".
"Hashes are ids a server assigns" is corrected at beat 2 ("Not a number Git picked").
55 s, inside 50 to 65.
S1 (W): "Git checks the name every time it reads" is false on git 2.54 for loose objects; see the series-level entry for the command output. Beats 1 to 4 match Pro Git 10.2 and 1.3. The check question says "What do its names have in common?" where "its" is the file; the intended answer (the blob name is identical) is right, but "names" plural invites "the commit names", which differ. Say "What can you say about the file's name in each repository?"
Verdict: back to 1b. Rewrite beat 5 so the claim is detectability, not a per-read check, and change the screen line from a cross on read to a mismatch shown by comparison. Replace "hex".
Unit 3: Three kinds of object
One idea: blob, tree, commit, and what each holds. Yes.
All beats serve it.
No metaphor; the card says so and the script shows the objects as themselves. Acceptable under the guide because the objects are the thing being taught.
Assumes units 1 and 2. "Photo" (beat 4) comes from unit 1; "named by content" from unit 2. Covered.
"A commit contains the files" is corrected at beat 4 ("It points at one tree").
51 s, inside 50 to 60.
S4 (X): "three kinds of thing" conflicts with unit 24's tag object; gitglossary lists four object types; Pro Git 10.2 says "three main". Beat 4 "It names its parent commit" is singular; unit 5 widens it to parents, which is fine because unit 5 comes next. Beat 3 omits the mode stored with each tree entry (Pro Git 10.2: "mode, type, and filename"); that is a correct simplification, not an error.
Screen flag: beat 4 "a commit card: tree, parent, author, message" is a card plus four fields, five things if the card counts. Keep the card as the frame and show the four fields, or drop "author" from the screen (the narration can still say it).
Verdict: back to 1b for the one-word fix "three main kinds" (and the matching line in unit 24).
Unit 4: One copy of each file, and packs underneath
One idea: the snapshot model does not multiply storage. The title's "and" suggests two, but both halves answer the same objection, and the card's misconception line proves the point: deltas are a storage detail under an unchanged model. One idea.
All beats serve it.
Photo stack; "ten photos stacked" is on screen and "A photo of every file, every commit" is spoken. The card says no break needed, and none is reached.
Assumes 1 to 3. Covered.
"So Git does store diffs after all" is corrected at beat 5.
57 s, inside 55 to 65.
Beats 2 and 3 match Pro Git 10.2 and 10.4 as recorded. Beat 4 "It keeps the newest version whole. Older versions are stored as differences from it" is stated by Pro Git 10.4 for its example ("the second version of the file is the one that is stored intact") and explained there as the general preference for fast access to the most recent version. Supported. "Now and then Git packs" matches the recorded gc, loose-object and push triggers.
Verdict: pass.
Unit 5: History is a chain of pointers to parents
One idea: a commit names its parent, so a name covers a history. Yes. Beat 5 (merges have two parents) is the same idea extended, not a second one.
All beats serve it.
Card: "A chain where each link is stamped with the previous link's fingerprint." The script says "chain" (beat 5) and "The parent's name is part of the child's content" (beat 3), but never "link", "stamped" or "fingerprint". The fingerprint word was taught in unit 2 and would tie the two units together for free. Flag: metaphor half-spoken.
Assumes 2 and 3. Covered.
"A commit knows its children" is corrected at beat 2.
54 s, inside 50 to 65.
Matches Pro Git 3.1 and 10.2 as recorded. Beat 4 "Same name, same history, byte for byte" follows from content addressing and is true.
Verdict: pass. Suggest one word in beat 3: "The parent's fingerprint is part of the child's content."
Unit 6: A branch is a note on a commit
One idea: a branch is a movable pointer, not a copy. Yes.
All beats serve it.
Sticky note; spoken throughout, break said at beat 5 as the visual language promises.
Assumes 5. Covered.
"A branch is a copy of the project" is corrected at beat 1.
62 s, inside 55 to 70.
Beat 2 "Forty one bytes": verified, .git/refs/heads/main is 41 bytes (40 hex plus newline), matching Pro Git 3.1. Caveat worth knowing but not a finding: refs are often held in packed-refs rather than one file each (a fresh clone's remote refs are, as tested), so "on disk it is a file" is the loose-ref case the source itself describes. Beat 4 "Deleting one removes the note. The commits it pointed at are untouched" is true; git branch -d refuses an unmerged branch, which is a safety on top and need not be said.
Verdict: pass.
Unit 7: HEAD says where you are
The idea sentence has three clauses: HEAD selects the branch that grows; switching moves HEAD and rewrites files; switching is refused if it would destroy unsaved changes. The first two are one idea (HEAD is the marker and everything follows it). Beat 5, the refusal, is a safety rule about the working tree, not about where you are. Flag: two ideas, with beat 5 the extra one.
Beats 1 to 4 serve the idea. Beat 5 does not; strike it or move it to the post. Unit 8 beat 3 and unit 13 cover what happens to unsaved changes anyway.
"You are here" marker; the script says "Which one are you on? HEAD answers" and "HEAD is a marker". Spoken closely enough.
Assumes 6. "Switching branches" is said plainly, no command name needed. Covered.
"Commits go to the repository, not one branch" is corrected at beat 3.
50 s, at the floor. Striking beat 5 drops it to about 42 s; replace it with a beat that lands the idea, for example showing HEAD's file ("HEAD is itself a file: ref: refs/heads/main", recorded from Pro Git 10.3), which makes the marker concrete.
Beats 1 to 4 match Pro Git 3.1, 7.7 and 10.3 as recorded. U: beat 5 "Git refuses" is not among the recorded statements. Tested: git checkout side with a dirty file prints "error: Your local changes to the following files would be overwritten by checkout... Please commit your changes or stash them before you switch branches. Aborting", so it is true; if the beat stays, record the git-checkout or git-switch manual as its source.
Verdict: back to 1b. Decide whether beat 5 belongs here; if it stays, record its source.
Unit 8: Three places: your files, the tray, the last commit
One idea: add copies into the index, commit photographs the index. Yes.
All beats serve it.
Tray; spoken from beat 2 on.
Assumes 7. "HEAD" and "the last commit" are covered. S8 (M): this is the unit that must define "staging area" and "staged" for unit 9 to be followable, and it does not.
"Commit saves your working files" is corrected at beat 5.
60 s, inside 55 to 70; room for the one added sentence.
Matches Pro Git 7.7 ("The index is your proposed next commit", the commit description) as recorded. Beat 4 "copies the file into the tray" is the right level of detail.
Verdict: back to 1b to add the staging-area sentence at beat 2 (fix S8).
Unit 9: Every diff compares two of the three places
One idea: a diff is a comparison between two of the three places. Yes.
All beats serve it.
Two gaps between three columns; spoken at beats 1, 4 and 5.
Assumes 8. S8 (M): "staged" (beat 3, beat 5) is used before it is defined anywhere in the series. Fixed by unit 8.
"git diff shows all uncommitted changes" is corrected at beat 4.
51 s, inside 50 to 60.
Verified: after git add, git diff printed nothing and git diff --staged showed the change; git status prints "Changes to be committed" and "Changes not staged for commit". Beat 5 shortens the second heading to "Changes not staged", which is acceptable for the ear. U: --staged as the flag name is not in the recorded sources (Pro Git 7.7 is recorded but not its diff paragraphs); the git-diff manual and Pro Git 2.2 both document --staged as the synonym of --cached. Verified by the command above; record the source.
Verdict: pass once unit 8 defines "staged". Record the --staged source.
Unit 10: HEAD can point at a commit with no note
One idea: detached HEAD and how to keep what you commit there. Yes.
All beats serve it.
Marker on a commit with no note; spoken as "point straight at a commit" and "no branch".
Assumes 7. M: beat 2 "Check out an old commit, or a tag" uses "tag" fourteen units before unit 24 defines it. Say "an old commit" only, or "an old commit, or a release".
"Detached HEAD is an error state" is corrected at beat 3.
50 s, at the floor.
S5 (O, X): beat 4 "Move HEAD away, and nothing does" is contradicted by unit 12 and by the test (the commit survived gc --prune=now because the HEAD reflog references it). The git-checkout source's "referenced only by HEAD" is about refs; it is the reflog that keeps the commit for the following weeks. Beats 1, 2, 3 and 5 match the git-checkout DETACHED HEAD section as recorded.
Verdict: back to 1b. Beat 4: "Move HEAD away, and no note does." Beat 2: drop "or a tag".
Unit 11: Commits never change
One idea: immutability, so every rewrite is a new commit plus a moved note. Yes.
All beats serve it.
The note moving to a sibling commit; "moves the branch note" is spoken, "beside the old one" is on screen. Fine.
Assumes 5 and 6. M: "amend" (beat 2, "So what does amend do?") is never defined as the command for changing your last commit. One clause fixes it: "Amend, the command for fixing your last commit, makes a new commit..."
"Amend edits the commit in place" is corrected at beat 2.
59 s, inside 55 to 65.
Beat 2 matches git-commit --amend as recorded ("The new commit has the same parents and author"); verified: the reflog shows commit (amend) with a new name and the old name one entry down. S5 (O): beat 3 "Nothing points at it any more" should be "No note points at it", since the reflog does. Beat 5 "Only much later does Git clean up" matches Pro Git 10.7 ("a few months old").
Verdict: back to 1b for two line edits (define amend; "no note").
Unit 12: The reflog remembers where the notes have been
One idea: a local log of every ref move is the safety net. Yes.
All beats serve it.
Diary; spoken at beats 1, 4.
Assumes 11. M (low): "pushed" and "cloned" (beat 4) are used before units 20 to 23. The audience runs these commands, so the words are not new to them, but the guide's rule is strict and the sentence can read "It stays with your folder. It never travels to another repository."
"A commit with no branch is gone" is corrected at beat 3.
54 s, inside 50 to 60.
Beat 1 matches Pro Git 10.7 as recorded. Beat 2: verified reflog messages commit:, checkout: moving from, reset: moving to, commit (amend):. Beat 3 matches Pro Git 10.7's git branch recover-branch ab1afef. U: beat 4 "not pushed, and not cloned" is not among the recorded statements; verified (clone's reflog has 1 line versus 18 in the source) and Pro Git 10.7 says the reflog lives in .git/logs/. Record it. S2 (W): beat 5's ninety days is the wrong number for the case the unit is about; unreachable entries expire at thirty days per git-gc.
Screen flag: beat 2 "entries: commit, checkout, reset, amend" is a diary plus four entries. Show three entries, or let the diary be the frame.
Verdict: back to 1b. Fix the expiry number and record the "local only" source.
Unit 13: Reset moves the note; the flags say what follows
One idea: reset is three steps and the flags choose how many. Yes.
All beats serve it.
Note moves back, tray and files follow one at a time; spoken at beats 2 to 4.
Assumes 8 and 12. Covered; the reflog is used in beat 5 exactly as unit 12 taught it.
"Reset deletes commits" is corrected at beat 5.
55 s, inside 55 to 65.
Verified against Pro Git 7.7's three steps: after --soft the staged change stayed staged (M a.txt), after the default reset it stayed in the working tree only ( M a.txt), after --hard the tree was clean. Beat 1 "to a commit you name" omits that the default is HEAD, which is harmless.
Screen flag: beat 5 "old commits dimmed with a reflog entry; a lost file crossed" is four to five things (commits, reflog entry, file, cross). Drop the reflog entry from the screen; the narration carries it.
Verdict: pass.
Unit 14: A merge starts from the common ancestor
One idea: three-way merge from the common ancestor. Yes.
All beats serve it.
Card metaphor not spoken. The card says "Two people editing copies of the same page; compare each copy to the original." The script never mentions a page, a copy, an original or two people; it says "common ancestor" and "compares each tip to that ancestor". This is the Anytwo lesson from the guide ("A unit card's metaphor must be spoken in the script"). It is also why the unit is the shortest in the series at 45 s: the beat that would carry the metaphor is missing.
Assumes 5 and 6. "Tip" is used in beat 3 without definition; it is plain enough but "the newest commit on each branch" once would remove doubt.
"Merge compares the two tips to each other" is corrected at beat 3.
45 s, inside the card's 45 to 55 but under the brief's 50 s floor. Adding the metaphor beat brings it to about 55 s.
Matches Pro Git 3.2 as recorded. "The last commit both branches share" is the common case; criss-cross histories have more than one candidate, which is out of scope and correctly ignored.
Verdict: back to 1b. Add a beat (after beat 2) that speaks the page metaphor: "Like two people who each copied one page and edited it. To combine them, you compare each copy to the original, not to each other."
Unit 15: Fast-forward: nothing to merge
One idea. Yes.
All beats serve it. Beat 5 (ask for a merge commit anyway) serves it as the counter-case.
Note sliding forward; spoken at beat 3.
Assumes 14. Covered.
"Every merge creates a merge commit" is corrected at beat 3.
48 s, inside the card's 45 to 55, under the brief's floor by two seconds. It lands; no change needed.
Beats 1 to 4 match gitglossary "fast-forward" and Pro Git 3.2 as recorded; verified output "Fast-forward" with no new commit. U: beat 5 "You can ask Git for a merge commit anyway" is not recorded; git-merge --no-ff documents it. Record it.
Verdict: pass. Record the --no-ff source.
Unit 16: A conflict is two changes to the same lines
One idea. Yes.
All beats serve it.
None; the card says so, and the file is shown as itself. Acceptable.
Assumes 14. "git add" and "the tray" come from unit 8; "merge commit" from 14. Covered.
"A conflict means something broke" is corrected at beat 5.
53 s, inside 50 to 60.
Matches Pro Git 3.2 as recorded, including "run git add on each file to mark it as resolved" and "git commit to finalize the merge commit".
Verdict: pass.
Unit 17: Cherry-pick copies a change, not a commit
One idea. Yes.
All beats serve it.
Copy, not move; spoken at beat 4.
Assumes 11. Covered.
"Cherry-pick moves the commit over" is corrected at beat 4.
52 s, inside 50 to 60.
U: beat 4 "Same message, same author" is not in the recorded git-cherry-pick statement. Verified: the copied commit has author Alice, committer Rev, identical message, different name. True; record the source (git-cherry-pick, or the test). Beat 5 "Git does not know the two are related" is true by default; -x would add a line saying so, which is correctly out of scope.
Verdict: pass. Record the author/message source.
Unit 18: Rebase replays your commits on a new base
One idea. Yes.
All beats serve it.
Copying commits one by one onto a new base; spoken at beat 2.
Assumes 14 and 17. Covered.
"Rebase moves commits" is corrected at beat 4.
51 s, inside 50 to 60.
Matches Pro Git 3.6 as recorded, including the same-snapshot claim in beat 5. Beat 4 "Same rule as always" is a usable back-reference because the rule was stated in unit 11.
Verdict: pass.
Unit 19: Do not rewrite commits others have
One idea. Yes.
All beats serve it.
Two boxes whose chains disagree; "two repositories... disagree" is spoken and the box is the repository's shape. Fine.
S7 (M, ordering): no. The unit assumes a second repository, pull and push, none of which has been taught. Move it after unit 23.
"Rebase is dangerous in general" is corrected at beats 1 and 5.
52 s, inside 50 to 60.
Beat 4 matches Pro Git 3.6 "The Perils of Rebasing" ("you'll see two commits that have the same author, date, and message"; "reintroduce all those rebased commits"). S6 (X): beat 5's rule is stricter than the source and conflicts with unit 23 beat 5.
Verdict: back to 1b. Reorder to after 23; fix the idea map dependencies to 18, 22, 23; reword beat 5 to the source's rule.
Unit 20: A clone is the whole repository
The idea sentence carries two: a clone is a full repository, and origin is a remembered name for a remote. Beat 4 is the second one. It is needed by unit 21, and it is one sentence, so this is tolerable, but note that the check question only tests the first.
Beats 1, 2, 3, 5 serve the first idea; beat 4 serves unit 21.
Two equal boxes; "Both sides are full repositories" is spoken and the box is the repository's shape. Fine.
Assumes 6. "Notes" and "the reflog" come from 6 and 12. Covered.
"A clone is a working copy of the latest files" is corrected at beat 2.
51 s, inside 50 to 60.
S3 (W, X): beat 2 "Clone copies all of it" is false for the reflog and settings beat 1 just listed, and for local branches (they become remote-tracking). Beats 3, 4, 5 match Pro Git 2.5 and git-clone as recorded.
Screen flag: beat 1 "a box labelled .git with its contents" is a box plus four named contents. Show three.
Verdict: back to 1b. Fix beats 1 and 2 as in S3.
Unit 21: origin/main is your memory of their note
One idea. Yes.
All beats serve it.
Bookmark versus live view; spoken at beat 2.
Assumes 20. M (low): beat 3 "when you fetch or push" names both commands one unit before they are taught. Unit 22 follows immediately, so this is the mildest case in the series; "when you next talk to origin" would avoid it.
"origin/main is the remote's branch" is corrected at beat 2.
50 s, at the floor.
Beats 1, 2, 4, 5 match Pro Git 10.3 ("bookmarks to the last known state") and gitglossary as recorded. U: beat 3 "Git moves it for you, when you fetch or push" is not recorded for the push half. Verified: after a successful push the origin/main reflog shows update by push, and after a fetch fetch: fast-forward. True; record it (git-push manual, "update the corresponding remote-tracking branch").
Verdict: pass. Record the push source; optionally soften "fetch or push".
Unit 22: Fetch downloads. Pull also merges
One idea: pull is fetch plus one more step. Yes, despite two commands in the title.
All beats serve it.
Bookmarks versus your note; spoken at beats 2, 3, 5.
Assumes 15 and 21. "Rebase" (beat 4) is from 18. Covered.
"Fetch changes your files" is corrected at beat 3.
50 s, at the floor.
Beats 1 to 3 and 5 match Pro Git 2.5 as recorded ("it doesn't automatically merge it with any of your work or modify what you're currently working on"). U: beat 4 "Or rebase onto it, if you set that" is not recorded; git-pull --rebase and pull.rebase document it. Record it. Beat 1 "every commit you do not have yet" means every commit reachable from their branches, which is the right simplification.
Verdict: pass. Record the pull-rebase source.
Unit 23: Push asks the remote to move its note
One idea: push is a fast-forward request. Beat 5 (force) is the same idea's escape hatch and reads as part of it.
All beats serve it.
A request to move the other box's note; spoken at beat 1.
Assumes 15 and 22. Covered.
"Push uploads files" is corrected at beat 1.
57 s, inside 55 to 65.
O (minor): beats 2 and 3 locate the fast-forward check at the remote ("The remote says yes only if", "The remote refuses"). The check is made by git push on your side against the tips the remote advertises; git-push, --force: "Usually, git push will refuse to update a branch that is not an ancestor of the commit being pushed." Verified output: ! [rejected] main -> main (fetch first), followed by hint: Updates were rejected because the remote contains work that you do not have locally. A server can add its own refusal (receive.denyNonFastForwards), but by default a forced push is accepted. The viewer's model survives either way; the one line that matters is beat 5 "A force push skips the check", which is exactly right because the check is local. Pro Git 2.5 (recorded) says "your push will rightly be rejected" without naming who, so the script is a step beyond its source. If you want precision at no cost: beat 2 "Git says yes only if their main is in the history of your commit" and beat 3 "The push is refused." Beat 4 and 5 match Pro Git 2.5 and git-push.
Verdict: pass. Optional precision edit on who refuses.
Unit 24: A tag is a note that never moves
Three ideas in one card: a tag does not move (beats 1, 2); there are two kinds (beats 3, 4); tags are pushed on purpose (beat 5). The check question tests the second. Flag: more than one idea. The push fact is the odd one out; it is a remote fact that belongs in the post, or as one spoken sentence attached to beat 2 rather than a beat of its own.
Beats 1 to 4 serve the title; beat 5 serves unit 23's topic.
Card metaphor not spoken. The card says "A pinned note"; the script says "stays put" and "forever" but never "pinned". The screen line for beat 2 says "pinned". One word fixes it: "A tag is a note pinned to one commit."
Assumes 6 and 20. Covered. "Signed" (beat 4) is a mention, not a dependency.
"A tag is a kind of branch" is corrected at beats 1 and 2.
53 s, inside 50 to 60.
Beat 2 "points at one commit, forever" matches Pro Git 10.3 "a reference that never moves"; strictly, git tag -f can re-point one and a tag can point at any object (Pro Git 10.3: "you can tag any Git object"), but the source makes the same simplification, so this is supported. S4 (X): beat 4 "an object of its own" versus unit 3's "three kinds". U: beat 4's contents (message, date, tagger, signature) are not in the recorded statement; Pro Git 10.3 lists "a tagger, a date, a message, and a pointer" and gitglossary adds the signature; verified by git cat-file -p v1.1. Record it. U: beat 5 "Tags are not pushed by default" is not recorded; git-push documents --tags ("in addition to refspecs explicitly listed") and --follow-tags; verified: after plain pushes two new tags were absent from the origin, and git push origin v1.0 sent one. Record it.
Screen flag: beat 4 "message, date, tagger, signature" is an object plus four fields. Show three; "can be signed" can stay spoken.
Verdict: back to 1b. Speak the metaphor; say "a fourth kind of object"; decide whether beat 5 stays in the video; record the two sources.
---
Flags by category
Script does not speak its card's metaphor. Unit 14 (two people, copies of a page, the original: none spoken). Unit 24 ("pinned" never spoken). Unit 5 ("stamped with the previous link's fingerprint": only "chain" spoken; half).
Screen lines with more than four things (counting the frame). Unit 3 beat 4; unit 12 beat 2; unit 13 beat 5; unit 20 beat 1; unit 24 beat 4. Each is a container plus four named parts; cut one part or do not label the container.
Technical term used before it is defined. "staged" (unit 9 beats 3 and 5; never defined). "tag" (unit 10 beat 2; defined in 24). "amend" (unit 11 beat 2; never defined). "hex" (unit 2 beat 1). "pulled", "push" (unit 19; defined in 22, 23). "pushed", "cloned" (unit 12 beat 4; defined in 23, 20). "fetch", "push" (unit 21 beat 3; defined in 22, 23). The first three are the ones that break a viewer's model; the rest are command names the audience already uses.
Unit the audience could not follow from earlier units alone. Unit 19 (needs 20 to 23). Unit 9 (needs "staged" from 8, which is missing).
Units carrying two ideas. Unit 7 (beat 5, the refusal rule). Unit 24 (two kinds plus push-on-purpose). Unit 20 (beat 4 defines "remote" and "origin"; tolerable because 21 needs it and it is one sentence).
Units too short to land. Unit 14 at 45 s, for the reason above (the metaphor beat is missing). Unit 15 at 48 s lands as is. No unit is over length; every fix recommended below adds words without forcing a cut.
Misconceptions. All 24 are addressed at the beat the card names.
Metaphor breaks. Units 1, 2 and 6 say their break once and stop, as the visual language promises. No script stretches a metaphor past the break named on its card.
---
Recommended changes, most important first
Unit 2 beat 5. Replace "Git checks the name every time it reads" with a detectability claim; change the screen from a cross-on-read to a mismatch. (S1, wrong.)
Unit 12 beat 5 and idea. Change ninety days to about thirty for lost commits, citing gc.reflogExpireUnreachable. (S2, wrong.)
Unit 20 beats 1 and 2. "Clone copies every object", not "all of it"; keep the reflog and settings out of the "copied" claim. (S3, wrong and cross-unit.)
Unit 19. Move it after unit 23; set its dependencies to 18, 22, 23; reword beat 5 to "rewrite only commits nobody else has built on", which matches Pro Git 3.6 and unit 23. (S6, S7.)
Unit 8 beat 2. Add "Git also calls it the staging area. Putting a file there is staging it." so unit 9's "staged" has a referent. (S8.)
Unit 10 beat 4 and unit 11 beat 3. "No note points at it" instead of "nothing points at it". (S5.)
Unit 14. Add a beat that speaks the card's page metaphor. (Metaphor; also fixes the short length.)
Unit 3 beat 1 and unit 24 beat 4. "Three main kinds" and "a fourth kind of object". (S4.)
Unit 24. Say "pinned"; move beat 5 (push on purpose) to the post or fold it into one spoken sentence; record the sources for the annotated tag's contents and for tags not being pushed by default.
Unit 7. Strike beat 5 or move it to the post; if it stays, record git-checkout/git-switch as its source. Consider replacing it with the HEAD file (ref: refs/heads/main) to keep the unit at length.
Unit 10 beat 2. Drop "or a tag". Unit 11 beat 2. Define amend in a clause. Unit 2 beat 1. "Forty characters", not "hex".
Record the seven verified-but-unrecorded claims in the source list: reflog is local and not cloned (Pro Git 10.7); cherry-pick keeps author and message (git-cherry-pick, or the test output); --no-ff (git-merge); --staged is --cached (git-diff); pull can rebase (git-pull); push updates the remote-tracking branch (git-push); checkout refuses to overwrite local changes (git-checkout). The guide's Anytwo lesson applies: the reviewer can only check what is written down.
Shared visual language. Rename the "tag" shape to "label" so unit 24's tags are unambiguous in the storyboard.
Screen lines in unit 3 beat 4, 12 beat 2, 13 beat 5, 20 beat 1, 24 beat 4: cut to four things.
Unit 23 beats 2 and 3 (optional). "Git says yes only if" and "The push is refused", since the fast-forward check runs on your side.
Unit 1 check question (optional). Ask what Git stores (the change or the two photos) so unit 4's deltas do not make the current answer half-true.
Unit 2 check question (optional). "What can you say about the file's name in each repository?"
Count of findings by class
Class | Count | Where |
|---|---|---|
Wrong | 3 | S1 (unit 2 beat 5), S2 (unit 12 beat 5), S3 (unit 20 beat 2) |
Overstated | 4 | S5 (unit 10 beat 4), S5 (unit 11 beat 3), unit 23 beats 2 and 3, unit 19 beat 5 (stricter than source) |
Unsupported by recorded sources | 9 | unit 7 beat 5, unit 9 beat 3, unit 12 beat 4, unit 15 beat 5, unit 17 beat 4, unit 21 beat 3, unit 22 beat 4, unit 24 beat 4, unit 24 beat 5. Every one was verified true by a source read or a command run; none needs a script change, all need a recorded source |
Cross-unit inconsistency | 6 | S3 (20 vs 12 and 21), S4 (3 vs 24), S5 (10 and 11 vs 12), S6 (19 vs 23), unit 1 check question vs unit 4, S9 (visual language "tag" vs unit 24) |
Omission producing a wrong model | 7 | S8 (staged undefined; units 8 and 9), S7 (unit 19 ordering), unit 10 "tag", unit 11 "amend", unit 12 "pushed/cloned", unit 21 "fetch or push", unit 2 "hex" |
Total accuracy findings | 29 |
Structural flags, not counted above: 3 metaphors not spoken, 5 screen lines over four things, 3 units carrying a second idea, 1 unit too short to land.
Verdicts. Back to 1b: units 2, 3, 7, 8, 10, 11, 12, 14, 19, 20, 24 (11 units, plus unit 9 which passes only once unit 8 is fixed). Pass: units 1, 4, 5, 6, 13, 15, 16, 17, 18, 21, 22, 23. Most of the returns are one-line edits; the structural changes are the unit 19 move, the unit 14 added beat, and the unit 7 and 24 beat decisions.
Do you like what you are reading? Subscribe to receive updates.
Unsubscribe anytime