elf-notes/content/docs/git/_index.md

2.6 KiB

+++ title = "Git Notes" description = "Basic documentation of Git" date = 2022-04-27T18:00:00+00:00 updated = 2022-04-27T18:00:00+00:00 template = "docs/section.html" sort_by = "weight" weight = 6 draft = false [taxonomies] documentation=["Reference"] categories=["Git", "Version Control", "VCS"] +++

Git is the most widely used version control system (or source configuration management) tool. Pretty much everything I do uses Git. This is where I keep my notes on how to do things.

Starting a project

Git is project and folder-centered, and to start using git go to the root folder of a project you want to place under source control and initialize it:

$ mkdir a-new-project
$ git init

This creates a new folder, .git, where Git will store your commit history and some configuration details.

Putting files into git

To put files under source control, you must add them. To update the entire folder, switch to the root of the project and add all of it:

$ git add .
$ git commit

An editor will pop-up, asking you what this commit is about. It's generally polite, especially if you're working in a team, to explain your commit in some detail-- and to generally keep the commit small, in order to ensure that you don't have to explain too much!

If your commit message could be a single line, you can add it directly from the command line:

$ git add .
$ git commit -m "Updated the widget to widgetize."

... and you can even combine both commands, but be careful: this command will not add any files that are new. It will only commit existing files that have been modified, and will delete any files that you have deleted, from the repository. (Deleted files still exist in the history and can always be recovered.)

$ git commit -am "Updated the widget to widgetize."

Git Configuration

You can have a global Git configuration file, $HOME/\.gitconfig, in which you keep your personal information and command aliases, which is one of three ways you can add your own commands to Git.

[user]
    name = Elf M. Sternberg
    email = someguy@example.com
    
[alias]
    unstage = reset -q HEAD --
    nevermind = !git reset --hard HEAD && git clean -d -f
	wip = for-each-ref --sort='authordate:iso8601' --format='%(color:green)%(authordate:relative)%09%(color:white)%(refname:short)' refs/heads	
    stem = "!f() { git checkout -b $1 master; }; f"
    start = !git init && git commit --allow-empty -m \"Initial commit\"

I'll explain each of these eventually, but for now, just know that if you want your commits to be attributed to the right person, you must have the [user] block, and