Pro Yearly is on sale from $80 to $50! »

Git Rebase

Git Rebase

Git is the dominant tool for version management. Misunderstanding and misusing Git can cost development teams time, energy, and money. Few better examples exist than Git's default merge workflow which creates repositories that are hard to read, debug, and maintain. In this talk, I'll show how to use the Rebase Workflow instead, which puts Git to work for you to produce quality code that's easy to handle and kicks your team into high productivity.

E0e036f89c14b3e59640318eedf9670b?s=128

Brooke Kuhlmann

June 28, 2020
Tweet

Transcript

  1. Git Rebase Presented by Brooke Kuhlmann

  2. Git Rebase Key Benefits https://www.alchemists.io/articles/git_commit_anatomy

  3. Linear Git Rebase https://www.alchemists.io/articles/git_commit_anatomy

  4. Linear Readable Git Rebase https://www.alchemists.io/articles/git_commit_anatomy

  5. Linear Readable Debuggable Git Rebase https://www.alchemists.io/articles/git_commit_anatomy

  6. A Brief Review

  7. A Brief Review

  8. Merge versus Rebase

  9. Merge versus Rebase

  10. Merge versus Rebase

  11. Merge versus Rebase

  12. Merge versus Rebase

  13. Merge versus Rebase

  14. Merge versus Rebase

  15. Merge "Join two or more development histories together." https://git-scm.com/docs/git-merge

  16. Merge "Join two or more development histories together." https://git-scm.com/docs/git-merge

  17. Merge "Join two or more development histories together." https://git-scm.com/docs/git-merge

  18. Merge Example (semi-linear)

  19. Merge Example (semi-linear)

  20. Merge Example (non-linear)

  21. Merge Example (non-linear)

  22. None
  23. None
  24. None
  25. git log --graph --pretty=format:"%C(yellow)%h%C(reset) %C(green)%cr.%C(reset)" Git Log https://www.alchemists.io/projects/dotfiles

  26. git log --graph --pretty=format:"%C(yellow)%h%C(reset) %C(green)%cr.%C(reset)" Git Log ⭐ https://www.alchemists.io/projects/dotfiles

  27. git log --graph --pretty=format:"%C(yellow)%h%C(reset) %C(green)%cr.%C(reset)" Git Log %C(yellow) Yellow https://www.alchemists.io/projects/dotfiles

  28. git log --graph --pretty=format:"%C(yellow)%h%C(reset) %C(green)%cr.%C(reset)" Git Log %h SHA https://www.alchemists.io/projects/dotfiles

  29. git log --graph --pretty=format:"%C(yellow)%h%C(reset) %C(green)%cr.%C(reset)" Git Log %C(reset) Color Reset

    https://www.alchemists.io/projects/dotfiles
  30. git log --graph --pretty=format:"%C(yellow)%h%C(reset) %C(green)%cr.%C(reset)" Git Log %C(green) Green https://www.alchemists.io/projects/dotfiles

  31. git log --graph --pretty=format:"%C(yellow)%h%C(reset) %C(green)%cr.%C(reset)" Git Log %cr Committer Date

    https://www.alchemists.io/projects/dotfiles
  32. git log --graph --pretty=format:"%C(yellow)%h%C(reset) %C(green)%cr.%C(reset)" Git Log %C(reset) Color Reset

    https://www.alchemists.io/projects/dotfiles
  33. Rebase "Reapply commits on top of another base tip." https://git-scm.com/docs/git-rebase

  34. Rebase "Reapply commits on top of another base tip." https://git-scm.com/docs/git-rebase

  35. Rebase Onto master Branch https://www.atlassian.com/blog/git/simple-git-workflow-is-simple

  36. Rebase Onto master Branch https://www.atlassian.com/blog/git/simple-git-workflow-is-simple

  37. Rebase Onto feature Branch https://www.atlassian.com/blog/git/simple-git-workflow-is-simple

  38. Rebase Onto feature Branch https://www.atlassian.com/blog/git/simple-git-workflow-is-simple

  39. Rebase Example

  40. Rebase Example

  41. git pull Merge Workflow Synchronize: 1⃣

  42. git pull Merge Workflow Synchronize: 1⃣ git fetch && git

    merge
  43. git pull Merge Workflow git switch --create example Synchronize: 1⃣

    2⃣ Work:
  44. git pull Merge Workflow git switch --create example Synchronize: 1⃣

    2⃣ Work: --create branch
  45. git pull Merge Workflow git switch --create example Synchronize: 1⃣

    2⃣ Work: --track
  46. git pull Merge Workflow git switch --create example git commit

    Synchronize: 1⃣ 2⃣ Work: --track
  47. git pull Merge Workflow git switch --create example git commit

    ... Synchronize: 1⃣ 2⃣ Work: --track
  48. git pull Merge Workflow git switch --create example git commit

    ... git switch master Synchronize: 1⃣ 2⃣ 3⃣ Push: Work: --track
  49. git pull Merge Workflow git switch --create example git commit

    ... git switch master git pull Synchronize: 1⃣ 2⃣ 3⃣ Push: Work: --track
  50. git pull Merge Workflow git switch --create example git commit

    ... git switch master git pull git switch example Synchronize: 1⃣ 2⃣ 3⃣ Push: Work: --track
  51. git pull Merge Workflow git switch --create example git commit

    ... git switch master git pull git switch example git pull origin master Synchronize: 1⃣ 2⃣ 3⃣ Push: Work: --track
  52. git pull Merge Workflow git switch --create example git commit

    ... git switch master git pull git switch example git pull origin master git push Synchronize: 1⃣ 2⃣ 3⃣ Push: Work: --track
  53. git pull Merge Workflow git switch --create example git commit

    ... git switch master git pull git switch example git pull origin master git push Synchronize: 1⃣ 2⃣ 3⃣ Push: Work: --track
  54. git pull Rebase Workflow git switch --create example --track git

    commit ... git switch master git pull git switch example git pull git push Synchronize: 1⃣ 2⃣ 3⃣ Push: Work: origin master
  55. git pull Rebase Workflow git switch --create example --track git

    commit ... git switch master git pull git switch example git pull git push Synchronize: 1⃣ 2⃣ 3⃣ Push: Work: origin master
  56. git pull Rebase Workflow git switch --create example --track git

    commit ... git switch master git pull git switch example git pull git push Synchronize: 1⃣ 2⃣ 3⃣ Push: Work: origin master
  57. git fetch --prune Rebase Workflow git switch --create example --track

    git commit ... git switch master git pull git switch example git pull git push Synchronize: 1⃣ 2⃣ 3⃣ Push: Work: origin master
  58. git fetch --prune Rebase Workflow git switch --create example --track

    git commit ... git switch master git pull git switch example git pull git push Synchronize: 1⃣ 2⃣ 3⃣ Push: Work: --prune origin master
  59. git fetch --prune git pull --rebase Rebase Workflow git switch

    --create example --track git commit ... git switch master git pull git switch example git pull git push Synchronize: 1⃣ 2⃣ 3⃣ Push: Work: origin master
  60. git fetch --prune git pull --rebase Rebase Workflow git switch

    --create example --track git commit ... git switch master git pull git switch example git pull git push Synchronize: 1⃣ 2⃣ 3⃣ Push: Work: --rebase origin master
  61. git fetch --prune git pull --rebase Rebase Workflow git switch

    --create example --track git commit ... git switch master git pull git switch example git pull git push Synchronize: 1⃣ 2⃣ 3⃣ Push: Work: origin master
  62. git fetch --prune git pull --rebase Rebase Workflow git switch

    --create example --track git commit ... git switch master git pull git switch example git pull git push Synchronize: 1⃣ 2⃣ 3⃣ Push: Work: origin master
  63. git fetch --prune git pull --rebase Rebase Workflow git switch

    --create example --track git commit ... git switch master git pull git switch example git pull git push Synchronize: 1⃣ 2⃣ 3⃣ Push: Work: --rebase origin master
  64. git fetch --prune git pull --rebase Rebase Workflow git switch

    --create example --track git commit ... git switch master git pull git switch example git pull git push Synchronize: 1⃣ 2⃣ 3⃣ Push: Work: --rebase origin master
  65. git fetch --prune git pull --rebase Rebase Workflow git switch

    --create example --track git commit ... git switch master git pull git switch example git pull git push Synchronize: 1⃣ 2⃣ 3⃣ Push: Work: --rebase --rebase origin master
  66. git fetch --prune git pull --rebase Rebase Workflow git switch

    --create example --track git commit ... git switch master git pull git switch example git pull git push Synchronize: 1⃣ 2⃣ 3⃣ Push: Work: --force-with-lease --rebase --rebase origin master
  67. git fetch --prune git pull --rebase Rebase Workflow git switch

    --create example --track git commit ... git switch master git pull git switch example git pull git push Synchronize: 1⃣ 2⃣ 3⃣ Push: Work: --rebase --force-with-lease --rebase origin master
  68. Git Configuration - Quick Tips https://github.com/bkuhlmann/dotfiles/blob/master/home_files/.gitconfig.tt

  69. Git Configuration - Quick Tips https://github.com/bkuhlmann/dotfiles/blob/master/home_files/.gitconfig.tt

  70. [pull] rebase = true Git Configuration (Pull) ~/.gitconfig: https://github.com/bkuhlmann/dotfiles/blob/master/home_files/.gitconfig.tt

  71. [pull] rebase = true Git Configuration (Pull) git pull --rebase

    ~/.gitconfig: https://github.com/bkuhlmann/dotfiles/blob/master/home_files/.gitconfig.tt
  72. [pull] rebase = true Git Configuration (Pull) git pull --rebase

    ✅ git pull ~/.gitconfig: https://github.com/bkuhlmann/dotfiles/blob/master/home_files/.gitconfig.tt
  73. [pull] rebase = true Git Configuration (Pull) git config --global

    pull.rebase true ~/.gitconfig: Command Line Interface (CLI): https://github.com/bkuhlmann/dotfiles/blob/master/home_files/.gitconfig.tt
  74. Git Configuration (Pull) ~/.gitconfig: https://github.com/bkuhlmann/dotfiles/blob/master/home_files/.gitconfig.tt

  75. [pull] rebase = merges Git Configuration (Pull) ~/.gitconfig: https://github.com/bkuhlmann/dotfiles/blob/master/home_files/.gitconfig.tt

  76. [pull] rebase = merges Git Configuration (Pull) ~/.gitconfig: Git 2.22.0

    (or higher) https://github.com/bkuhlmann/dotfiles/blob/master/home_files/.gitconfig.tt
  77. [fetch] prune = true Git Configuration (Fetch) ~/.gitconfig: https://github.com/bkuhlmann/dotfiles/blob/master/home_files/.gitconfig.tt

  78. [fetch] prune = true Git Configuration (Fetch) git fetch --prune

    ~/.gitconfig: https://github.com/bkuhlmann/dotfiles/blob/master/home_files/.gitconfig.tt
  79. [fetch] prune = true Git Configuration (Fetch) git fetch --prune

    ✅ git fetch ~/.gitconfig: https://github.com/bkuhlmann/dotfiles/blob/master/home_files/.gitconfig.tt
  80. [fetch] prune = true Git Configuration (Fetch) git config --global

    fetch.prune true ~/.gitconfig: Command Line Interface (CLI): https://github.com/bkuhlmann/dotfiles/blob/master/home_files/.gitconfig.tt
  81. Git Interactive Rebase

  82. Git Interactive Rebase

  83. Git Rebase CLI git rebase --interactive master (standard)

  84. Git Rebase CLI git rebase --interactive master (standard) -i

  85. Git Rebase Editor pick 2dc5e2e29e22 Added initial implementation. pick f7a6ea7f46b8

    Added documentation. pick 317ef2c2c735 Fixed JSON schema. # Rebase 317ef2c2c735 onto f0c2847c9444 (2 commands) # # Commands: # p, pick <commit> = use commit # r, reword <commit> = use commit, but edit the commit message # e, edit <commit> = use commit, but stop for amending # s, squash <commit> = use commit, but meld into previous commit # f, fixup <commit> = like "squash", but discard this commit's log message # x, exec <command> = run command (the rest of the line) using shell # b, break = stop here (continue rebase later with 'git rebase --continue') # d, drop <commit> = remove commit # l, label <label> = label current HEAD with a name # t, reset <label> = reset HEAD to a label # m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]
  86. Git Rebase Editor pick 2dc5e2e29e22 Added initial implementation. pick f7a6ea7f46b8

    Added documentation. pick 317ef2c2c735 Fixed JSON schema. # Rebase 317ef2c2c735 onto f0c2847c9444 (2 commands) # # Commands: # p, pick <commit> = use commit # r, reword <commit> = use commit, but edit the commit message # e, edit <commit> = use commit, but stop for amending # s, squash <commit> = use commit, but meld into previous commit # f, fixup <commit> = like "squash", but discard this commit's log message # x, exec <command> = run command (the rest of the line) using shell # b, break = stop here (continue rebase later with 'git rebase --continue') # d, drop <commit> = remove commit # l, label <label> = label current HEAD with a name # t, reset <label> = reset HEAD to a label # m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]
  87. Git Rebase Editor pick 2dc5e2e29e22 Added initial implementation. pick f7a6ea7f46b8

    Added documentation. pick 317ef2c2c735 Fixed JSON schema. # Rebase 317ef2c2c735 onto f0c2847c9444 (2 commands) # # Commands: # p, pick <commit> = use commit # r, reword <commit> = use commit, but edit the commit message # e, edit <commit> = use commit, but stop for amending # s, squash <commit> = use commit, but meld into previous commit # f, fixup <commit> = like "squash", but discard this commit's log message # x, exec <command> = run command (the rest of the line) using shell # b, break = stop here (continue rebase later with 'git rebase --continue') # d, drop <commit> = remove commit # l, label <label> = label current HEAD with a name # t, reset <label> = reset HEAD to a label # m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]
  88. Git Rebase Editor pick 2dc5e2e29e22 Added initial implementation. pick f7a6ea7f46b8

    Added documentation. pick 317ef2c2c735 Fixed JSON schema. # Rebase 317ef2c2c735 onto f0c2847c9444 (2 commands) # # Commands: # p, pick <commit> = use commit # r, reword <commit> = use commit, but edit the commit message # e, edit <commit> = use commit, but stop for amending # s, squash <commit> = use commit, but meld into previous commit # f, fixup <commit> = like "squash", but discard this commit's log message # x, exec <command> = run command (the rest of the line) using shell # b, break = stop here (continue rebase later with 'git rebase --continue') # d, drop <commit> = remove commit # l, label <label> = label current HEAD with a name # t, reset <label> = reset HEAD to a label # m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]
  89. Git Rebase Editor pick 2dc5e2e29e22 Added initial implementation. pick f7a6ea7f46b8

    Added documentation. pick 317ef2c2c735 Fixed JSON schema. # Rebase 317ef2c2c735 onto f0c2847c9444 (2 commands) # # Commands: # p, pick <commit> = use commit # r, reword <commit> = use commit, but edit the commit message # e, edit <commit> = use commit, but stop for amending # s, squash <commit> = use commit, but meld into previous commit # f, fixup <commit> = like "squash", but discard this commit's log message # x, exec <command> = run command (the rest of the line) using shell # b, break = stop here (continue rebase later with 'git rebase --continue') # d, drop <commit> = remove commit # l, label <label> = label current HEAD with a name # t, reset <label> = reset HEAD to a label # m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]
  90. git rebase --interactive @~<number> (by number) Git Rebase CLI

  91. git rebase --interactive @~<number> (by number) HEAD Git Rebase CLI

  92. (by branch) git rebase --interactive <branch> Git Rebase CLI

  93. (by tag) git rebase --interactive <tag> Git Rebase CLI

  94. (by SHA) git rebase --interactive <SHA> Git Rebase CLI

  95. (by upstream) git rebase --interactive @{upstream} Git Rebase CLI

  96. (by root) git rebase --interactive --root Git Rebase CLI

  97. (by root) git rebase --interactive --root ⚠ Git Rebase CLI

  98. (advanced) GIT_EDITOR=true git rebase --interactive master Git Rebase CLI https://www.alchemists.io/projects/dotfiles

  99. (advanced) GIT_EDITOR=true git rebase --interactive master Git Rebase CLI https://www.alchemists.io/projects/dotfiles

  100. Git Rebase Editor pick 2dc5e2e29e22 Added initial implementation. pick f7a6ea7f46b8

    Added documentation. pick 317ef2c2c735 Fixed JSON schema. # Rebase 317ef2c2c735 onto f0c2847c9444 (2 commands) # # Commands: # p, pick = use commit # r, reword = use commit, but edit the commit message # e, edit = use commit, but stop for amending # s, squash = use commit, but meld into previous commit # f, fixup = like "squash", but discard this commit's message # x, exec = run command (the rest of the line) using shell # b, break = stop here (continue rebase later with 'git rebase --continue') # d, drop = remove commit
  101. Git Rebase Editor pick 2dc5e2e29e22 Added initial implementation. pick f7a6ea7f46b8

    Added documentation. pick 317ef2c2c735 Fixed JSON schema. # Rebase 317ef2c2c735 onto f0c2847c9444 (2 commands) # # Commands: # p, pick = use commit # r, reword = use commit, but edit the commit message # e, edit = use commit, but stop for amending # s, squash = use commit, but meld into previous commit # f, fixup = like "squash", but discard this commit's message # x, exec = run command (the rest of the line) using shell # b, break = stop here (continue rebase later with 'git rebase --continue') # d, drop = remove commit
  102. Git Rebase Editor pick 2dc5e2e29e22 Added initial implementation. pick f7a6ea7f46b8

    Added documentation. pick 317ef2c2c735 Fixed JSON schema. # Rebase 317ef2c2c735 onto f0c2847c9444 (2 commands) # # Commands: # p, pick = use commit # r, reword = use commit, but edit the commit message # e, edit = use commit, but stop for amending # s, squash = use commit, but meld into previous commit # f, fixup = like "squash", but discard this commit's message # x, exec = run command (the rest of the line) using shell # b, break = stop here (continue rebase later with 'git rebase --continue') # d, drop = remove commit
  103. Git Rebase Editor pick 2dc5e2e29e22 Added initial implementation. pick f7a6ea7f46b8

    Added documentation. pick 317ef2c2c735 Fixed JSON schema. # Rebase 317ef2c2c735 onto f0c2847c9444 (2 commands) # # Commands: # p, pick = use commit # r, reword = use commit, but edit the commit message # e, edit = use commit, but stop for amending # s, squash = use commit, but meld into previous commit # f, fixup = like "squash", but discard this commit's message # x, exec = run command (the rest of the line) using shell # b, break = stop here (continue rebase later with 'git rebase --continue') # d, drop = remove commit
  104. Git Rebase https://www.alchemists.io/screencasts/git_rebase_pick

  105. Git Rebase Pick https://www.alchemists.io/screencasts/git_rebase_pick

  106. Git Rebase Editor pick 2dc5e2e29e22 Added initial implementation. pick f7a6ea7f46b8

    Added documentation. pick 317ef2c2c735 Fixed JSON schema. https://www.alchemists.io/screencasts/git_rebase_pick
  107. Git Rebase Editor pick 2dc5e2e29e22 Added initial implementation. pick f7a6ea7f46b8

    Added documentation. pick 317ef2c2c735 Fixed JSON schema. https://www.alchemists.io/screencasts/git_rebase_pick
  108. Git Rebase Editor pick 2dc5e2e29e22 Added initial implementation. pick f7a6ea7f46b8

    Added documentation. pick 317ef2c2c735 Fixed JSON schema. https://www.alchemists.io/screencasts/git_rebase_pick
  109. Git Rebase Editor pick 2dc5e2e29e22 Added initial implementation. pick f7a6ea7f46b8

    Added documentation. pick 317ef2c2c735 Fixed JSON schema. https://www.alchemists.io/screencasts/git_rebase_pick
  110. Git Rebase Editor pick 2dc5e2e29e22 Added initial implementation. pick f7a6ea7f46b8

    Added documentation. pick 317ef2c2c735 Fixed JSON schema. https://www.alchemists.io/screencasts/git_rebase_pick
  111. Git Rebase Editor pick 2dc5e2e29e22 Added initial implementation. pick f7a6ea7f46b8

    Added documentation. pick 317ef2c2c735 Fixed JSON schema. pick 317ef2c2c735 Fixed JSON schema. pick 2dc5e2e29e22 Added initial implementation. pick f7a6ea7f46b8 Added documentation. https://www.alchemists.io/screencasts/git_rebase_pick
  112. Git Rebase https://www.alchemists.io/screencasts/git_rebase_reword

  113. Git Rebase Reword https://www.alchemists.io/screencasts/git_rebase_reword

  114. Git Rebase Editor pick 2dc5e2e29e22 Added initial implementation. pick f7a6ea7f46b8

    Added documentation. pick 317ef2c2c735 Fixed JSON schema. https://www.alchemists.io/screencasts/git_rebase_reword
  115. Git Rebase Editor pick 2dc5e2e29e22 Added initial implementation. pick f7a6ea7f46b8

    Added documentation. pick 317ef2c2c735 Fixed JSON schema. https://www.alchemists.io/screencasts/git_rebase_reword
  116. Git Rebase Editor pick 2dc5e2e29e22 Added initial implementation. reword f7a6ea7f46b8

    Added documentation. pick 317ef2c2c735 Fixed JSON schema. https://www.alchemists.io/screencasts/git_rebase_reword
  117. Git Rebase Editor Added documentation. Provides improved navigation within the

    README. This was autogenerated using `tocer --generate`. https://www.alchemists.io/screencasts/git_rebase_reword
  118. Git Rebase Editor Added documentation. Provides improved navigation within the

    README. This was autogenerated using `tocer --generate`. https://www.alchemists.io/screencasts/git_rebase_reword
  119. Git Rebase Editor Provides improved navigation within the README. This

    was autogenerated using `tocer --generate`. https://www.alchemists.io/screencasts/git_rebase_reword
  120. Git Rebase Editor Provides improved navigation within the README. This

    was autogenerated using `tocer --generate`. Added table of contents to the README. https://www.alchemists.io/screencasts/git_rebase_reword
  121. Git Rebase Editor Provides improved navigation within the README. This

    was autogenerated using `tocer --generate`. Added table of contents to the README. https://www.alchemists.io/screencasts/git_rebase_reword
  122. Git Rebase Editor Provides improved navigation within the README. This

    was autogenerated using `tocer --generate`. What Added table of contents to the README. https://www.alchemists.io/screencasts/git_rebase_reword
  123. Git Rebase Editor Provides improved navigation within the README. This

    was autogenerated using `tocer --generate`. What Why Added table of contents to the README. https://www.alchemists.io/screencasts/git_rebase_reword
  124. Git Rebase CLI git log --pretty=format:"%h %s" https://www.alchemists.io/screencasts/git_rebase_reword

  125. Git Rebase CLI 2dc5e2e29e22 Added initial implementation. 7eac5b44a5c0 Added table

    of contents to the README. 217c2803c799 Fixed JSON schema. git log --pretty=format:"%h %s" https://www.alchemists.io/screencasts/git_rebase_reword
  126. Git Rebase CLI 2dc5e2e29e22 Added initial implementation. 7eac5b44a5c0 Added table

    of contents to the README. 217c2803c799 Fixed JSON schema. git log --pretty=format:"%h %s" https://www.alchemists.io/screencasts/git_rebase_reword
  127. Git Rebase https://www.alchemists.io/screencasts/git_rebase_edit

  128. Git Rebase Edit https://www.alchemists.io/screencasts/git_rebase_edit

  129. Git Rebase Editor pick 2dc5e2e29e22 Added initial implementation. pick 7eac5b44a5c0

    Added table of contents to the README. pick 217c2803c799 Fixed JSON schema. https://www.alchemists.io/screencasts/git_rebase_edit
  130. Git Rebase Editor pick 2dc5e2e29e22 Added initial implementation. pick 7eac5b44a5c0

    Added table of contents to the README. pick 217c2803c799 Fixed JSON schema. https://www.alchemists.io/screencasts/git_rebase_edit
  131. Git Rebase Editor edit 2dc5e2e29e22 Added initial implementation. pick 7eac5b44a5c0

    Added table of contents to the README. pick 217c2803c799 Fixed JSON schema. https://www.alchemists.io/screencasts/git_rebase_edit
  132. Git Rebase https://www.alchemists.io/screencasts/git_rebase_squash

  133. Git Rebase Squash https://www.alchemists.io/screencasts/git_rebase_squash

  134. Git Rebase Editor pick 2dc5e2e29e22 Added initial implementation. pick 7eac5b44a5c0

    Added table of contents to the README. pick 217c2803c799 Fixed JSON schema. https://www.alchemists.io/screencasts/git_rebase_squash
  135. Git Rebase Editor pick 2dc5e2e29e22 Added initial implementation. pick 7eac5b44a5c0

    Added table of contents to the README. pick 217c2803c799 Fixed JSON schema. https://www.alchemists.io/screencasts/git_rebase_squash
  136. Git Rebase Editor pick 2dc5e2e29e22 Added initial implementation. squash 7eac5b44a5c0

    Added table of contents to the README. squash 217c2803c799 Fixed JSON schema. https://www.alchemists.io/screencasts/git_rebase_squash
  137. Git Rebase Editor Added initial implementation. First initial working implementation.

    Added table of contents to the README. Provides improved navigation within the README. This was autogenerated using `tocer --generate`. Fixed JSON schema. Corrects a typo in the original implementation which caused the builds to fail. https://www.alchemists.io/screencasts/git_rebase_squash
  138. Git Rebase Editor Added initial implementation. First initial working implementation.

    Added table of contents to the README. Provides improved navigation within the README. This was autogenerated using `tocer --generate`. Fixed JSON schema. Corrects a typo in the original implementation which caused the builds to fail. https://www.alchemists.io/screencasts/git_rebase_squash
  139. Git Rebase Editor Added initial implementation. First initial working implementation.

    Added table of contents to the README. Provides improved navigation within the README. This was autogenerated using `tocer --generate`. Fixed JSON schema. Corrects a typo in the original implementation which caused the builds to fail. https://www.alchemists.io/screencasts/git_rebase_squash
  140. Git Rebase Editor Added initial implementation. First initial working implementation.

    Added table of contents to the README. Provides improved navigation within the README. This was autogenerated using `tocer --generate`. Fixed JSON schema. Corrects a typo in the original implementation which caused the builds to fail. https://www.alchemists.io/screencasts/git_rebase_squash
  141. Git Rebase Editor Added initial implementation. First initial working implementation.

    Added table of contents to the README. Provides improved navigation within the README. This was autogenerated using `tocer --generate`. https://www.alchemists.io/screencasts/git_rebase_squash
  142. Git Rebase Editor Added initial implementation. First initial working implementation.

    Added table of contents to the README. Provides improved navigation within the README. This was autogenerated using `tocer --generate`. https://www.alchemists.io/screencasts/git_rebase_squash
  143. Git Rebase Editor Added initial implementation. First initial working implementation.

    Added table of contents to the README. Provides improved navigation within the README. This was autogenerated using `tocer --generate`. https://www.alchemists.io/screencasts/git_rebase_squash
  144. Git Rebase Editor Added initial implementation. First initial working implementation.

    Provides improved navigation within the README. This was autogenerated using `tocer --generate`. https://www.alchemists.io/screencasts/git_rebase_squash
  145. Git Rebase Editor Added initial implementation. First initial working implementation.

    Provides improved navigation within the README. This was autogenerated using `tocer --generate`. ✅ https://www.alchemists.io/screencasts/git_rebase_squash
  146. Git Rebase Editor Added initial implementation. First initial working implementation.

    Provides improved navigation within the README. This was autogenerated using `tocer --generate`. ✅ https://www.alchemists.io/screencasts/git_rebase_squash
  147. Git Rebase Editor Added initial implementation. First initial working implementation.

    Provides improved navigation within the README. This was autogenerated using `tocer --generate`. ✅ https://www.alchemists.io/screencasts/git_rebase_squash
  148. Git Rebase Editor Added initial implementation. https://www.alchemists.io/screencasts/git_rebase_squash

  149. Git Rebase Editor Added initial implementation. First initial working implementation

    with README autogenerated with `tocer --generate`. https://www.alchemists.io/screencasts/git_rebase_squash
  150. Git Rebase Editor Added initial implementation. First initial working implementation

    with README autogenerated with `tocer --generate`. ✅ https://www.alchemists.io/screencasts/git_rebase_squash
  151. Git Rebase https://www.alchemists.io/screencasts/git_rebase_fixup

  152. Git Rebase Fixup https://www.alchemists.io/screencasts/git_rebase_fixup

  153. Git Rebase Fixup ⭐ ⭐ ⭐ ⭐ https://www.alchemists.io/screencasts/git_rebase_fixup

  154. Git Rebase Editor pick 2dc5e2e29e22 Added initial implementation. pick 7eac5b44a5c0

    Added table of contents to the README. pick 217c2803c799 Fixed JSON schema. https://www.alchemists.io/screencasts/git_rebase_fixup
  155. Git Rebase Editor pick 2dc5e2e29e22 Added initial implementation. pick 7eac5b44a5c0

    Added table of contents to the README. pick 217c2803c799 Fixed JSON schema. https://www.alchemists.io/screencasts/git_rebase_fixup
  156. Git Rebase Editor pick 2dc5e2e29e22 Added initial implementation. pick 7eac5b44a5c0

    Added table of contents to the README. pick 217c2803c799 Fixed JSON schema. https://www.alchemists.io/screencasts/git_rebase_fixup
  157. Git Rebase Editor pick 2dc5e2e29e22 Added initial implementation. pick 7eac5b44a5c0

    Added table of contents to the README. fixup 217c2803c799 Fixed JSON schema. https://www.alchemists.io/screencasts/git_rebase_fixup
  158. Git Rebase Editor pick 2dc5e2e29e22 Added initial implementation. fixup 217c2803c799

    Fixed JSON schema. pick 7eac5b44a5c0 Added table of contents to the README. ✅ https://www.alchemists.io/screencasts/git_rebase_fixup
  159. Git Rebase CLI git log --pretty=format:"%h %s" https://www.alchemists.io/screencasts/git_rebase_fixup

  160. Git Rebase CLI 657a933f46f5 Added initial implementation. 4809b7a53f05 Added table

    of contents to the README. git log --pretty=format:"%h %s" https://www.alchemists.io/screencasts/git_rebase_fixup
  161. Git Rebase https://www.alchemists.io/screencasts/git_rebase_exec

  162. Git Rebase Exec https://www.alchemists.io/screencasts/git_rebase_exec

  163. Git Rebase Editor pick 2dc5e2e29e22 Added initial implementation. pick 7eac5b44a5c0

    Added table of contents to the README. pick 217c2803c799 Fixed JSON schema. https://www.alchemists.io/screencasts/git_rebase_exec
  164. Git Rebase Editor pick 2dc5e2e29e22 Added initial implementation. pick 7eac5b44a5c0

    Added table of contents to the README. pick 217c2803c799 Fixed JSON schema. https://www.alchemists.io/screencasts/git_rebase_exec
  165. Git Rebase Editor pick 2dc5e2e29e22 Added initial implementation. pick 7eac5b44a5c0

    Added table of contents to the README. exec printf "%s\n" "This is an example script." pick 217c2803c799 Fixed JSON schema. https://www.alchemists.io/screencasts/git_rebase_exec
  166. Git Rebase https://www.alchemists.io/screencasts/git_rebase_break

  167. Git Rebase Break https://www.alchemists.io/screencasts/git_rebase_break

  168. Git Rebase Editor pick 2dc5e2e29e22 Added initial implementation. pick 7eac5b44a5c0

    Added table of contents to the README. pick 217c2803c799 Fixed JSON schema. https://www.alchemists.io/screencasts/git_rebase_break
  169. Git Rebase Editor pick 2dc5e2e29e22 Added initial implementation. pick 7eac5b44a5c0

    Added table of contents to the README. pick 217c2803c799 Fixed JSON schema. https://www.alchemists.io/screencasts/git_rebase_break
  170. Git Rebase Editor pick 2dc5e2e29e22 Added initial implementation. pick 7eac5b44a5c0

    Added table of contents to the README. break pick 217c2803c799 Fixed JSON schema. https://www.alchemists.io/screencasts/git_rebase_break
  171. Git Rebase https://www.alchemists.io/screencasts/git_rebase_drop

  172. Git Rebase Drop https://www.alchemists.io/screencasts/git_rebase_drop

  173. Git Rebase Editor pick 2dc5e2e29e22 Added initial implementation. pick 7eac5b44a5c0

    Added table of contents to the README. pick 217c2803c799 Fixed JSON schema. https://www.alchemists.io/screencasts/git_rebase_drop
  174. Git Rebase Editor pick 2dc5e2e29e22 Added initial implementation. pick 7eac5b44a5c0

    Added table of contents to the README. pick 217c2803c799 Fixed JSON schema. https://www.alchemists.io/screencasts/git_rebase_drop
  175. Git Rebase Editor pick 2dc5e2e29e22 Added initial implementation. drop 7eac5b44a5c0

    Added table of contents to the README. pick 217c2803c799 Fixed JSON schema. https://www.alchemists.io/screencasts/git_rebase_drop
  176. Git Rebase CLI git log --pretty=format:"%h %s" https://www.alchemists.io/screencasts/git_rebase_drop

  177. Git Rebase CLI 2dc5e2e29e22 Added initial implementation. d39847560845 Fixed JSON

    schema. git log --pretty=format:"%h %s" https://www.alchemists.io/screencasts/git_rebase_drop
  178. Git Rebase Resolution

  179. Git Rebase Resolution git rebase --abort

  180. Git Rebase Resolution git rebase --abort git rebase --continue

  181. Git Rebase Resolution git rebase --abort git rebase --continue git

    rebase --skip
  182. Git Rebase Resolution git rebase --abort git rebase --continue git

    rebase --skip git rebase --show-current-patch
  183. Git Commit (fixup) git commit --fixup <sha> https://www.alchemists.io/screencasts/git_commit_fixup

  184. Git Commit (fixup) git commit --fixup <sha> ⭐ https://www.alchemists.io/screencasts/git_commit_fixup

  185. Git Commit (fixup) git log --pretty=format:"%h %s" https://www.alchemists.io/screencasts/git_commit_fixup

  186. Git Commit (fixup) 2dc5e2e29e22 Added initial implementation. 7eac5b44a5c0 Added table

    of contents to the README. 217c2803c799 Fixed JSON schema. git log --pretty=format:"%h %s" https://www.alchemists.io/screencasts/git_commit_fixup
  187. Git Commit (fixup) git commit --fixup 2dc5e2e29e22 2dc5e2e29e22 Added initial

    implementation. 7eac5b44a5c0 Added table of contents to the README. 217c2803c799 Fixed JSON schema. git log --pretty=format:"%h %s" https://www.alchemists.io/screencasts/git_commit_fixup
  188. Git Commit (fixup) git commit --fixup 2dc5e2e29e22 2dc5e2e29e22 Added initial

    implementation. 7eac5b44a5c0 Added table of contents to the README. 217c2803c799 Fixed JSON schema. git log --pretty=format:"%h %s" git commit --fixup 7eac5b44a5c0 https://www.alchemists.io/screencasts/git_commit_fixup
  189. Git Commit (fixup) git rebase --interactive master https://www.alchemists.io/screencasts/git_commit_fixup

  190. Git Commit (fixup) pick 2dc5e2e29e22 Added initial implementation. fixup! Added

    initial implementation. pick 7eac5b44a5c0 Added table of contents to the README. fixup! Added table of contents to the README. pick 217c2803c799 Fixed JSON schema. https://www.alchemists.io/screencasts/git_commit_fixup
  191. Git Commit (fixup) pick 2dc5e2e29e22 Added initial implementation. fixup! Added

    initial implementation. pick 7eac5b44a5c0 Added table of contents to the README. fixup! Added table of contents to the README. pick 217c2803c799 Fixed JSON schema. https://www.alchemists.io/screencasts/git_commit_fixup
  192. Git Commit (fixup) pick 2dc5e2e29e22 Added initial implementation. fixup! Added

    initial implementation. pick 7eac5b44a5c0 Added table of contents to the README. fixup! Added table of contents to the README. pick 217c2803c799 Fixed JSON schema. https://www.alchemists.io/screencasts/git_commit_fixup
  193. Git Commit (fixup) pick 2dc5e2e29e22 Added initial implementation. fixup! Added

    initial implementation. pick 7eac5b44a5c0 Added table of contents to the README. fixup! Added table of contents to the README. pick 217c2803c799 Fixed JSON schema. https://www.alchemists.io/screencasts/git_commit_fixup
  194. Git Commit (fixup) git log --pretty=format:"%h %s" https://www.alchemists.io/screencasts/git_commit_fixup

  195. Git Commit (fixup) ca5a69955876 Added initial implementation. 3226a5547e49 Added table

    of contents to the README. 8450b65fc5ec Fixed JSON schema. git log --pretty=format:"%h %s" https://www.alchemists.io/screencasts/git_commit_fixup
  196. Git Commit (squash) git commit --squash <sha> https://www.alchemists.io/screencasts/git_commit_squash

  197. Git Commit (squash) git log --pretty=format:"%h %s" https://www.alchemists.io/screencasts/git_commit_squash

  198. Git Commit (squash) 2dc5e2e29e22 Added initial implementation. 7eac5b44a5c0 Added table

    of contents to the README. 217c2803c799 Fixed JSON schema. git log --pretty=format:"%h %s" https://www.alchemists.io/screencasts/git_commit_squash
  199. Git Commit (squash) 2dc5e2e29e22 Added initial implementation. 7eac5b44a5c0 Added table

    of contents to the README. 217c2803c799 Fixed JSON schema. git log --pretty=format:"%h %s" git commit --squash 7eac5b44a5c0 https://www.alchemists.io/screencasts/git_commit_squash
  200. Git Commit (squash) 2dc5e2e29e22 Added initial implementation. 7eac5b44a5c0 Added table

    of contents to the README. 217c2803c799 Fixed JSON schema. git log --pretty=format:"%h %s" git commit --squash 7eac5b44a5c0 https://www.alchemists.io/screencasts/git_commit_squash
  201. Git Commit (squash) pick 2dc5e2e29e22 Added initial implementation. pick 7eac5b44a5c0

    Added table of contents to the README. squash! Added table of contents to the README. pick 217c2803c799 Fixed JSON schema. https://www.alchemists.io/screencasts/git_commit_squash
  202. Git Commit (squash) pick 2dc5e2e29e22 Added initial implementation. pick 7eac5b44a5c0

    Added table of contents to the README. squash! Added table of contents to the README. pick 217c2803c799 Fixed JSON schema. https://www.alchemists.io/screencasts/git_commit_squash
  203. Git Commit (squash) pick 2dc5e2e29e22 Added initial implementation. pick 7eac5b44a5c0

    Added table of contents to the README. squash! Added table of contents to the README. pick 217c2803c799 Fixed JSON schema. https://www.alchemists.io/screencasts/git_commit_squash
  204. Git Commit (amend) git commit --amend https://www.alchemists.io/projects/dotfiles

  205. Git Commit (amend) git commit --amend --no-edit https://www.alchemists.io/projects/dotfiles

  206. Git Commit (amend) git commit --amend --no-edit --all https://www.alchemists.io/projects/dotfiles

  207. Git Configuration - Rebase Tips https://github.com/bkuhlmann/dotfiles/blob/master/home_files/.gitconfig.tt

  208. Git Configuration - Rebase Tips https://github.com/bkuhlmann/dotfiles/blob/master/home_files/.gitconfig.tt

  209. [rebase] abbreviateCommands = true autoSquash = true autoStash = true

    Git Configuration (Rebase) ~/.gitconfig: https://github.com/bkuhlmann/dotfiles/blob/master/home_files/.gitconfig.tt
  210. [rebase] abbreviateCommands = true autoSquash = true autoStash = true

    Git Configuration (Rebase) ~/.gitconfig: https://github.com/bkuhlmann/dotfiles/blob/master/home_files/.gitconfig.tt
  211. [rebase] abbreviateCommands = true autoSquash = true autoStash = true

    Git Configuration (Rebase) ~/.gitconfig: https://github.com/bkuhlmann/dotfiles/blob/master/home_files/.gitconfig.tt
  212. [rebase] abbreviateCommands = true autoSquash = true autoStash = true

    Git Configuration (Rebase) ~/.gitconfig: https://github.com/bkuhlmann/dotfiles/blob/master/home_files/.gitconfig.tt
  213. [rebase] abbreviateCommands = true autoSquash = true autoStash = true

    Git Configuration (Rebase) git config --global rebase.abbreviateCommands true git config --global rebase.autoSquash true git config --global rebase.autoStash true ~/.gitconfig: Command Line Interface (CLI): https://github.com/bkuhlmann/dotfiles/blob/master/home_files/.gitconfig.tt
  214. [rerere] enabled = true autoUpdate = true Git Configuration (Rerere)

    ~/.gitconfig: https://github.com/bkuhlmann/dotfiles/blob/master/home_files/.gitconfig.tt
  215. [rerere] enabled = true autoUpdate = true Git Configuration (Rerere)

    ~/.gitconfig: https://github.com/bkuhlmann/dotfiles/blob/master/home_files/.gitconfig.tt
  216. [rerere] enabled = true autoUpdate = true Git Configuration (Rerere)

    ~/.gitconfig: https://github.com/bkuhlmann/dotfiles/blob/master/home_files/.gitconfig.tt
  217. [rerere] enabled = true autoUpdate = true Git Configuration (Rerere)

    git config --global rerere.enabled true git config --global rerere.autoUpdate true ~/.gitconfig: Command Line Interface (CLI): https://github.com/bkuhlmann/dotfiles/blob/master/home_files/.gitconfig.tt
  218. Git Lint https://www.alchemists.io/projects/git-lint

  219. Git Lint https://www.alchemists.io/projects/git-lint

  220. Added initial implementation Provides the initial foundation from which to

    work on additional features. Git Lint Example Commit https://www.alchemists.io/projects/git-lint
  221. Added initial implementation Provides the initial foundation from which to

    work on additional features. Git Lint Example Commit https://www.alchemists.io/projects/git-lint
  222. Added initial implementation Provides the initial foundation from which to

    work on additional features. Git Lint Example Commit https://www.alchemists.io/projects/git-lint
  223. Added initial implementation Provides the initial foundation from which to

    work on additional features. Git Lint Example Commit https://www.alchemists.io/projects/git-lint
  224. Added initial implementation Provides the initial foundation from which to

    work on additional features. Git Lint Example Commit https://www.alchemists.io/projects/git-lint
  225. gem install git-lint Git Lint Installation: https://www.alchemists.io/projects/git-lint

  226. gem install git-lint Git Lint cd <project> git checkout <branch>

    git-lint --analyze Installation: Usage: https://www.alchemists.io/projects/git-lint
  227. Next Steps

  228. Next Steps

  229. Next Steps

  230. Next Steps • Practice the Git Rebase Workflow each day.

  231. Next Steps • Practice the Git Rebase Workflow each day.

    • Add aliases/functions to your Dotfiles.
  232. Next Steps • Practice the Git Rebase Workflow each day.

    • Add aliases/functions to your Dotfiles. • Add Git Lint to all projects!
  233. Thanks https://www.alchemists.io