Git: Working in Teams
--
Most of the time, working in teams to deliver a working product is the way to go, especially to a customer. The traditional way of waiting for an individual to finish their code and then passing to another individual is bothersome and time inefficient. More than that, a way to track what has been done or changed by the previous individual is not an easy thing to do. Therefore, a more modern way of working in teams is needed to solve the problem. This is where Git comes in handy, as it is the most used version controller.
Git
Git is software for tracking changes in any set of files, usually used for coordinating work among programmers collaboratively developing source code during software development. Its goals include speed, data integrity, and support for distributed, non-linear workflows (thousands of parallel branches running on different systems).
A lot of words right? In short, git is a Version Control System. A control system means that Git is a content tracker. The content stored in Git are usually codes due to the features it includes. A Version Control System tracks the history of changes made to a project. This is because code in Git usually changes over the time by individuals of a team.
How to use Git
Since Git is a practical tool, the best way to explain is by giving examples.
Download Git
A complete guide on how to install Git is available on https://git-scm.com/book/en/v2/Getting-Started-Installing-Git .
To verify that Git has been installed, go into your command prompt and type:
git --version
Creating a Local Repository
In your computer, create a folder for your project. Let’s say, the name of the project is some-project
.
Go into the directory you wish to create your project in, and use the following command to initialize the local Git repository:
mkdir some-project
cd some-project
git init
Add some Code
Usually, a README
file is added first before anything else. A README
file describes the project. And since the main focus of this article is Git, we will not be covering a particular programming language. Create a file called README.md
and type what ever you want. Here is an example of the content:
# My First Project
My first ever project
Staging and Committing the code
Committing is the process in which the code is added to the local repository. Before a code is committed, it needs to be in the staging area. The staging area is to track files that are to be committed. Files that are not added to the staging area cannot be committed. This gives developers control over which files are to be committed.
Now let’s try to add our README
to the staging area:
git add README.md
You can also add multiple files to the staging area by leaving a blank space between each file like this:
git add file1 file2 file3
You can also add all files that have been changed to the staging area using:
git add .
Committing
To commit a file, use the command bellow:
git commit -m '<commit-message>'
By adding the -m
flag to git commit
, you can add just add a commit message into the command. Make sure the commit message is relevant to the change you made to the file.
Now, let’s say you want to add some more details about your project to the README
file like this:
# My First Project
My first ever project
This is a demo for Git
Status
You can use git status
to find out about new or modified files and files that are in the staging area.
Since we just made a modification to our README
, after running git status
in the command prompt, the status shows that our README
file is modified and is yet to be added to the staging area. So we can do that now:
git add README.md; git commit -m 'add more details to README'
Log
We can use git log
to print out all the commits up to the time the command was called. It shows the author of each commit, the date, and the commit message.
Branches
Git lets you branch out of your original code. This lets changes to the project be done in parallel. The default branch of a project is master
. To see which branch we are in, we can use git status
. We can also see what branches are in our local by using git branch
. To see remote branches, use git branch -r
. To see all branches, use git branch -a
.
Creating a New Branch Locally
First of all, be in the branch that you wish to be the parent of the new branch. In this case, the parent branch should be master
. Let’s say we want to create a new branch named my-branch
, we can used git branch <branch-name>
to create the branch and then checkout to the branch using git checkout <branch-name>
like this:
git branch my-branch
git checkout my-branch
Or we can also use a one-line command which will automatically checkout to the new branch:
git checkout -b my-branch
Now, modify the README
file in our new branch and commit it:
git add README.md git commit -m "my-branch commit"
Now that we’ve made a commit in our new my-branch
, our my-branch
is now ahead of the master
branch by 1 commit. To verify the commit in my-branch
, we can use git log
.
Merging
Now that our new my-branch
branch is ahead of master
branch. We can merge our changes made to my-branch
to the master
branch using git merge
. To merge my-branch
to the master
, we first have to checkout to the master
branch and the run git merge
:
git checkout master
git merge my-branch
The merge should be successful if there are no conflicts. If conflicts are present, we’ll have to resolve them first before the merge is done.
If we run git log
in master
branch, we should see the same number of commits as our my-branch
branch.
Remote Git Repository
We’ve only been working in the local repository. Each developer will work in their local repository but eventually, they will push their code into a remote repository. Once the code is in the remote repository, other developers can see and modify that code.
One of the most used remote repositories are GitHub. Go to the website and start a project. Give the repository a name and create the repository. It will create a remote repository in GitHub with the name we just specified.
In order to point our local repository with the remote repository, use the command:
git remote add origin <remote-repository-url>
Pushing to Remote Repository
Since our local branch has not existed in the remote repository, we add a -u
flag to the git push
command:
git push -u origin master
Else, if our local branch does not exist in the remote repository, simply use the standard push command:
git push origin master
Pulling Latest Changes
git pull
is used to fetch the latest changes from the remote repository into the local repository. This is useful when multiple developers work on the same project as code in the remote repository will consistently be updated as time goes on.
Stash
The git stash
command takes you uncommitted changes (both staged and unstage), saves them away for later use, and the reverts them from you working copy. To re-apply your staged changes, use git stash pop
. To view stashes, use git stash show
.
Rebasing
Rebasing is changing the base of you branch from one commit to another making it appear as if you’d created you branch from a different commit. The primary reason for rebasing is to maintain a linear project history.
The standard git rebase <base>
will automatically take the commits in your current working branch and apply them to the head of the passed branch. Using the -i
flag git rebase --interactive <base>
begins an interactive rebasing session instead of blindly moving all of the commits to the new base.
Reverting
The git revert
command can be considered an improved ‘undo’ type of command. Instead of removing the commit from the project history, it figures out how to invert the changes introduced by the commit and appends a new commit with the resulting inverse content. This prevents Git from losing history, which is important for the integrity of your revision history and for reliable collaboration.
git revert
takes a specified commit, inverse the changes from that commit and create a new “revert commit”.
To revert a commit, simply use:
git revert <commit-hash>
Conclusion
Git is a powerful tool for version control especially for teams developing software. It has the functionality, performance, security, and flexibility that most teams and individual need. Even though some might say it is hard to learn, Git still very capable and provides a lot of power to its user.
Thanks for reading!
Sources: