Getting Started With Git
What is Git?
An open-source version control system for tracking modifications in source code and files.
As a software developer, git has been part and parcel of my daily development workflow, allowing me to coordinate my code changes with other developers with ease, without worrying that one may overwrite or break the codebase.
Below are some basic terminology in git.
Git Terms | |
---|---|
git | git is typed in the command line to run git commands |
repo | Short-form for repository |
local | A copy of the repository in one's development machine |
remote/origin | The central repository hosted in the cloud/server |
clone | Create a copy of the repository, in your local machine |
fork | Create a copy of the original repository in your Github account (Used in Github) |
.gitignore | Specify which filenames to be excluded from tracking |
commit | A snapshot in the timeline of a git repository, identified by a descriptive message and an SHA id |
stage | List of files and code changes that are ready to be committed |
push | Apply commits from local to remote |
pull | Apply latest commits from remote to local |
stash | Temporary changes made to a working repository |
HEAD | Reference to the most recent commit in the current branch |
reset | Undo changes made by rolling back to previous commits |
branch | An independent line of development A lightweight movable pointer to a specific commit |
master | Usually denotes the main branch |
merge | Combine the changes of two or more branches into a single branch |
rebase | Re-apply the changes made on a single branch on top of changes made from another branch |
Pull request | An event created by a contributor to discuss and merge new code changes to the main branch. |
Github != Git
Git is a version control software tool that is used in the command line.
Github is a web hosting service for managing git repositories in the cloud.
For most cases, users will use git to manage changes between repositories on their local machine and the remote ones in Github. Github is a web-hosting service that provides cloud-based storage and GUI for storing and managing the centralized repositories.
Glossary of Git Commands
Configuration | |
---|---|
git config --global user.name name | Set the name you want attached to your commits |
git config --global user.email email_address | Set the email you want attached to your commits |
git config --global color.ui auto | Set automatic command line coloring for easy reviewing of Git output |
GIT_SSL_NO_VERIFY=boolean | Environment variable for running git commands on server without SSL certificates |
Initialisation/Setup | |
---|---|
git init | Initialize an existing directory as a Git repository |
git clone url | Clone a repository using a remote url |
Change Management | |
---|---|
git status | Show modified files in working directory, staged for your next commit |
git add file | Add a file to the stage before your next commit |
git rm file | Delete the file from project and stage the removal for commit |
git diff | Difference between what is changed but not staged |
git diff --staged | Difference between what is staged but not yet commited |
git commit -m descriptive_message | Commit your staged content as a new commit snapshot |
git push | Apply your local branch commits to the remote repository branch |
git pull | Fetch and merge any commits from the tracking remote branch |
git reset file | Unstage a file while retaining the changes in working directory |
git reset --soft commit | Rewrite working tree from specified commit Re-apply changes made to the staging area for that commit |
git reset --hard commit | Rewrite working tree from specified commit Clears the staging area |
git push origin -f branch | Force push branch to set the remote HEAD at the current commit |
git show commit | Show one or more objects (blobs, trees, tags and commits) |
git blame filename | Show history of commits made on the specific file |
Branch Management | |
---|---|
git branch | List all your local branches. A * will appear next to the currently active branch. Adding a -a flag lists all possible branches (local + remote) |
git branch branch | Create a new branch at the current commit |
git fetch origin branch | Fetch remote repository branch and create a local one |
git checkout branch | Switch to target branch |
git merge branch | Merge the specified branch's history into the current one |
git rebase branch | Apply any commits of current branch ahead of specified one |
git branch -m oldname newname | Rename branch from oldname to newname |
git push origin –delete oldname or git push origin : oldname | Delete old branch in remote |
git push origin -u newname | Push new local branch and set the remote branch (newname) to track the current local branch |
git diff branchB …branchA | Show the difference of what is in branchA that is not in branchB |
git log | Show all commits in the current branch's history |
Stash Management | |
---|---|
git stash | Save modified and staged changes |
git stash list | List stack-order of stashed file changes |
git stash pop | Write working from top of stash stack |
git stash drop | Discard the changes from top of stash stack |
Conclusion
The above list collates the many commands that I usually use in my day-to-day. This list is especially useful if you need remedies to common problematic scenarios (Eg. Accidentally pushing commits to master/dev branches: git reset; Trying to trace past commits for a specific file: git blame). Despite being around for almost 20 years, git still serves as a primary version control tool for many developers today. With most projects requiring multiple hands on deck and remote work being the new normal, it is hard for one to work on a project properly without it.