This textbook was authored for the CIS 400 - Object-Oriented Design, Implementation, and Testing course at Kansas State University. This section describes assignments specific to the Fall 2022 offering of that course. If you are not enrolled in the course, please disregard this section.
As we are creating a project iteratively this semester, it is a good chance to practice using feature branches with Git. This is a skill you will likely need to use in your future development efforts and career, and it can help solve many problems you may otherwise encounter when developing a project iteratively.
Using Remote-Tracking Feature Branches
In the GitHub section, we talked about both feature branches and remote repositories. It is important to understand that when you create a branch, you do so in the local (i.e. on your machine) repository.
For example, if you wanted to create a feature branch for data milestone 1, you would use this Git command on your development machine:
$ git branch ms1
And then check it out using the command:
$ git checkout ms1
As you work you can add and commit as normal, i.e.:
$ git add .
$ git commit -a -m "A description of what changed"
Any commits you make will be made on the feature branch
ms1, not your main branch.
Pushing Feature Branches to GitHub
At this point, your feature branch, and any of its commits, are only on your local machine. If you want to make them available on your origin (GitHub) repository, you’ll need to push them there. You can do this with the command:
$ git push origin ms1
This creates a corresponding branch,
ms1 in your GitHub repository, and pushes all the changes from your local
ms1 branch to your GitHub one (which is often referred to as
git push command pushes the currently checked out local branch to the specified branch of the specified remote repository. So if you have the local
ms1 branch checked out and push to the
ms1 branch, your two branches will be in sync.
But if you have a different branch checked out, i.e.
ms2 and issue the command
git push origin ms1, your local
ms2 changes will be applied to your remote
Likewise, if you specify a different remote branch to push to, i.e. you have
ms1 checked out but use the command
git push origin master, the changes from your local
ms1 branch will be applied to your remote
Thus, you should always be certain you are pushing to the correct branch. You can check what branch is currently checked out with the command:
$ git branch
This will list all local branches, and the currenlty checked out one will have an astrisk next to it (*).
Pushing a feature branch named in accordance with the guidelines (i.e.
ms2) to your
origin repository will trigger an evaluation by the Pendant tool if you have webhooks set up. You can visit the tool at: https://pendant.cs.ksu.edu to see the results.
Pulling a Remote Feature Branch to Another Local Machine
The other big benefit to pushing your feature branches to GitHub is that you can then pull them into other local repos you have cloned on other machines. For example, if you pushed your changes from a lab computer, you can pull those changes into a corresponding branch on your home PC.
However, there is one more step involved the first time you pull a new branch, as you will need a local branch to correspond to it. You can create that branch, and set it up to track the remote branch, with a single command:
$ git checkout -b ms1 origin/ms1
This command creates a local branch
ms1 that tracks the remote branch
origin/ms1. Because the local
ms1 branch now tracks
origin/ms1, when you have it checked out, you can use the command:
$ git pull
And git will pull from
origin/ms1 into the local
ms1 branch. Alternatively, you can use the full command:
$ git pull origin ms1
But you must again be careful that you are pulling the right corresponding branch.
Merging your Feature Branch into Master
Finally, when you have finished the milestone, you’ll want to merge your new changes from the feature branch into the main branch:
$ git checkout main
$ git merge ms1
And push the newly expanded main branch to GitHub:
$ git push origin main
After which you’ll need to create a release to turn in.