Further Git and GitHub for Effective Collaboration

This course introduces intermediate concepts and functionality of the version control system Git and the code repository GitHub. The course is focused on ensuring an effective and healthy collaborative process. When collaborating with others, measures and tooling need to be in place to manage the process in an effective way, keeping track of the sequence of changes, reviewing, and approving what those changes are and undoing them, if needed.

Both Git and GitHub provide powerful features that facilitate this process such as: branching, pull requests, forks, rewriting history with rebase, merge, reset, and releasing new versions of the software with tags to identify milestones in the development process.

Moreover, some tasks ensuring that all contributions follow agreed standards can be automated via a continuous integration system. This course will introduce the basics of GitHub Actions, how to create workflows and run them automatically, when new changes are identified.


Learning outcomes

After completing this workshop, you will be better able to

  1. Use advance Git commands to manage the parallel development of multiple features
  2. Collaborate effectively with others on a code base to achieve larger goals
  3. Apply continuous integration to automate tasks
  4. Understand how to access support for research computing via the Research Computing Service at Imperial College

Delivery of the course

Material will be delivered as a lecture with task following the Carpentries teaching style.


Basic familiarity with Git and GitHub (see our basic course)


Setup Download files required for the lesson
00:00 1. Collaborating with Git and GitHub How does collaborative working differ from individual working?
What are the challenges of working collaboratively with Git?
00:10 2. Branching and Merging How can I or my team work on multiple features in parallel?
How can changes from parallel tracks of work be combined?
01:00 3. Rewriting history with Git How can multiple collaborators work efficiently on the same code?
When should I use rebasing, merging and stashing?
How can I reset or revert changes without upsetting my collaborators?
01:50 4. Code versions, releases and tags What is a Git tag and how does it differ from a branch?
How can I tag commits?
How and when should I release a new version of my code?
What is the difference between major and minor version changes?
How can I effectively communicate what has changed between versions?
How can I publish a release on Github?
02:10 5. Using GitHub actions for continuous integration What is meant by continuous integration (CI) and what are the benefits?
What tasks can be automated in CI?
How do I set up CI using GitHub Actions?
How do I know if CI runs are passing and what should I do if they are failing?
What should I do if I can’t replicate failing runs locally?
02:50 6. Managing contributions to code What is the difference between forking and branching?
How can my group use GitHub pull requests to manage changes to a code?
How can I suggest changes to other people’s code?
What makes a good pull request review?
03:20 7. Collaborative development How do I put into practice all the previous knowledge at once?
What caveats might I find in a real collaborative scenario?
03:50 Finish

The actual schedule may vary slightly depending on the topics and exercises chosen by the instructor.