version control system
Post created on: 2/25/2021
Git is a version control system for everything from small sites to large-scale apps and sites.
The first step is to download and install Git on your machine whether your OS of choice is (Windows, macOS, Linux). Although there are GUIs available e.g. Github Desktop it is easy to get started on the CLI (Command Line Interface) which could be the terminal like git bash or the built-in terminal in your editor.
You can get started by creating an empty repository (or repo) on your host of choice mine is Github you then clone that empty repo into your files which creates a copy of this locally and then add your files to this folder. I created an empty test repo on Github and I get the following instructions:
You can create a new repo on the command line with the instructions shown above or if you already have a folder with files you wish to add to git you can do this with the following commands (as shown above):
git remote add origin git@github.com:'YOUR_USERNAME'/'REPO_NAME'.git
git push -u origin master
In this case, I'm going to use the quick setup option and simply clone/copy the repo onto my PC
git clone git@github.com:cguttweb/test-repo.git // it's recommended to use SSH rather than HTTPS option
// It will say the following
Cloning into 'test-repo'...
warning: You appear to have cloned an empty repository. // this is fine as we've not created anything yet
cd test-repo then I use git status command and see:
Cloning into 'test-repo'...
warning: You appear to have cloned an empty repository.
Create a file index.html
in the folder and then run git status again this time you will see:
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
index.html
nothing added to commit but untracked files present (use "git add" to track)
Next you run git add index.html
this will enable got to recognise your file and track any changes to it.
Key Commands
git add
: this command add files to git and makes sure any changes are 'tracked' which are added to the 'staging area' - this is the middle man where you can check any updates/changes before committing
// using the repo above
git add index.html // adds the file to track any changes
Then using git status you'll see the following:
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: index.html
git add . // using dot will add all of your files instead of having to do them individually
git commit
: this commits or finalised your changes when using this you need to add-m
which is a relevant message explaining your changes e.g.
git commit -m 'first file'
[master (root-commit) 13ae2e2] first file
1 file changed, 12 insertions(+)
create mode 100644 index.html
git push
: this 'pushes' any changes to the remote repo on Github so it is accessible to everyone. Using the test repo because it is the first push up to an empty repo you'll need to include-u
to make sure branch is setup to track correctly e.g.
git push -u origin master // command to push up to git repo then you'll see something like this:
Counting objects: 3, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 398 bytes | 398.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To github.com:cguttweb/test-repo.git
* [new branch] master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.
git pull
: this opposite to push this will 'pull' any updates into your local repo so you have the most recent changes available to yougit status
: this will give you information about your files e.g. whether or not changes have been made and whether they have been tracked e.g.
// Using git status on my test repo:
Your branch is up-to-date with 'origin/master'.
nothing to commit, working tree clean // meaning there are no untracked changes and everything is up to date
If I make changes to my index file:
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: index.html
no changes added to commit (use "git add" and/or "git commit -a")
You'll need to add a new commit message then when using git status again:
Your branch is ahead of 'origin/master' by 1 commit.
(use "git push" to publish your local commits)
nothing to commit, working tree clean
then finally because this branch is being tracked you'll just need to use:
git push // You'll see something like:
Writing objects: 100% (3/3), 394 bytes | 394.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To github.com:cguttweb/test-repo.git
13ae2e2..c8037ac master -> master
git rm
: remove a file from the 'staging area' if updated by accidentgit log
: this will give a list of the most recent commits e.g. date and who committed the updatesgit diff
: this will show differences between original files and the most recent updates
Branching and Merging
git branch
: this is most useful for larger software/app projects where you can complete updates without modifying the original content e.g.
git branch
* master
git branch footerfix // creates a new branch called footerfix
git branch
- master
- footerfix
The default branch will be the master
but you can create several updates for different things you may be working on.
Switching branches use the git checkout BRANCH_NAME
e.g.
git branch
* master // this will be the default
git branch footerfix // switches from the master to the new footer-fix branch
Once you are happy with the fix you merge this back into your master
branch:
git checkout master // switch from footerfix to master branch
git merge footerfix // merge the fix back into the master branch then you can push to production
To delete a branch use the -d
flag:
git branch -d footerfix