User Tools

Site Tools


git

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
git [2026/06/07 00:12] – [commit] jhagstrandgit [2026/06/07 23:56] (current) – [Configuration] jhagstrand
Line 91: Line 91:
 The commit command creates a commit. The commit command creates a commit.
  
-Each commit is a version of the source code.+Each commit is a new version of the source code.
  
 Initial edits to a text file are tentative.  The commit command makes those edits permanent. Initial edits to a text file are tentative.  The commit command makes those edits permanent.
Line 103: Line 103:
   $ git diff     # compare the changes made between two commits    $ git diff     # compare the changes made between two commits 
  
-The commit message.+The programmer composes a commit message for each commit.
  
 +  $ git commit -m 'Refactored the layermenu from table to flexbox.'
 +  $ git commit   # skip the -m parameter and an editor will open to receive a multi-line message
 +
 +The multi-line commit message.  
 +  line 1 is title, max 50 chars
 +  line 2 is blank, this is what signals git to split title and body
 +  line 3+ is body, max 72 chars per line, hit enter to hardcode each newline
 +
 +The commit message title style guide.
 +  * Like a document sub-heading
 +  * Imperative
 +  * Start with capital letter, no period at the end
 +  * No articles or filler
 +
 +
 +The history log of commit messages, combined with skillful use of the branch, merge, reset, and rebase commands enable a programmer to communicate to future developers exactly what he changed and how, why and when.
  
 ====tag==== ====tag====
Line 119: Line 135:
   git show       # details of latest commit   git show       # details of latest commit
   git tag -d 1.0 # delete a tag   git tag -d 1.0 # delete a tag
 +
 +Tags are often used to implement public release versioning.  There are three common version formats.
 +
 +  * Marketing Versioning, like macOS Sonoma
 +
 +  * Calendar Versioning, like 2026.06.04
 +
 +  * Semantic Versioning (SemVer)
 +    * see https://semver.org/
 +    * major.minor.patch, like v3.6.2
 +    * minor and patch releases maintain backward compatibility
 +    * as soon as backward compatibility is broken, the major number must be incremented
 +    * important for a library with a public api, for example
 +
 +(I remember the good old days, when broken backward compatibility was a sign of incompetence.)
 +
 ====worktree==== ====worktree====
  
Line 161: Line 193:
 The checkout command has two different functions.  This can be confusing if you ever have a branch and a file with the same name.  In 2019 the switch and restore commands were introduced.  They eliminate the confusion and the command names are more self-explanatory. The checkout command has two different functions.  This can be confusing if you ever have a branch and a file with the same name.  In 2019 the switch and restore commands were introduced.  They eliminate the confusion and the command names are more self-explanatory.
  
-^ old                   ^ new                  ^ +^ old                    ^ new                  ^ 
-| git checkout <branch> | git switch <branch> +| git checkout <branch>  | git switch <branch> 
-| git checkout <file>   | git restore <file>   |+| git checkout <file>    | git restore <file>   | 
 +| git checkout <commit>  | (none)   |
  
 The old checkout commands still work as always.  And kudos to the git developers for honoring backward compatibility. The old checkout commands still work as always.  And kudos to the git developers for honoring backward compatibility.
  
 +(Note that checkout of a commit is extraordinary and results in a detached HEAD.)
 ====diff==== ====diff====
  
Line 202: Line 236:
 git log --oneline --graph # shows a hierarchy of branches git log --oneline --graph # shows a hierarchy of branches
  
 +==== interactive rebase ====
  
 +If you don't like the way the log looks now, the interactive rebase command lets you fix, reorder, drop and squash the commits, and reword the commit messages.  Do this in a branch you are working solo, not a public branch or one that has already been pushed.
 +
 +  $ git switch mybranch
 +  $ git rebase -i HEAD~3
 +  $ git rebase -i b619fca0
 +
 +The log is displayed in reverse chronological order.
 +
 +The interactive rebase editor window displays the commits in chronological order.
 +
 +A note about reordering the commits.  The interactive rebase operation will start at the base and reapply your commits in new new order, rewriting your source code files in each commit.  It is possible to break code if you make a mistake.
 +
 +https://www.sitepoint.com/git-interactive-rebase-guide/
 ===== How to use ===== ===== How to use =====
  
 +
 +==== Configuration ====
 +
 +Use git config --global to set name and email.  
 +  * Support anonymity by using a shielded email, like for example the private GitLab noreply masked email.
 +  * Consider using a pair-programming persona as user.name to give credit to the AI author.
 +
 +  $ git config --global user.name "Your Name"
 +  $ git config --global user.name "Your Name & Gemini 1.5 Flash"  # pair-programming personna
 +  $ git config --global user.email "jerry@gmail.com"              # protect privacy on public host like gitlab
 +
 +Aider automatically adds a Co-authored by: line to the body.  Tell aider to skip that by adding parameters to .aider.conf.yml file:
 +  attribute-author: false
 +  attribute-committer: false
  
 ====Create a new repository==== ====Create a new repository====
git.1780805540.txt.gz · Last modified: 2026/06/07 00:12 by jhagstrand

Except where otherwise noted, content on this wiki is licensed under the following license: Public Domain
Public Domain Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki