Files
WS-11-Advanced-Git/README.md
T
2026-06-23 17:02:26 +08:00

4.6 KiB
Raw Blame History

🚀 WS 11 - Advanced Git & Github


📖 Overview

In this assignment, you will simulate multiple developers working on the same project using different Git branches. You will create parallel development scenarios, encounter merge conflicts, and practice resolving them using Git. By the end, you should feel confident handling common conflict situations that occur in real-world software development.


Prerequisites

  • Git installed
  • A GitHub account
  • Java SDK 25
  • Maven

🎯 Objectives

By completing this assignment, you will:

  • Become comfortable creating and switching between Git branches
  • Learn how to resolve same-line content conflicts
  • Practice resolving:
  • Modify/modify conflicts
  • Modify/delete conflicts
  • Rename conflicts
  • Understand how Git tracks file changes across branches

Project Structure

  • Calculator.java: Interface which defines calculator methods
  • BasicCalculator.java: Implements Calculator with basic arithmetic
  • MathHelper.java: Static utility methods (multiply, square, max)
  • ReportGenerator.java: Uses Calculator and MathHelper to produce formatted output

📦 Task 1 Refactoring Conflict

Scenario:

Two developers are working in parallel:

  • Developer A refactors the code by renaming a method.
  • Developer B continues developing a new feature using the old method name.

When their work is merged, a conflict will occur.

  1. First fork & clone the repository and create develop branch:
git clone https://github.com/<your-username>/WS-11-Advanced-Git
git checkout -b develop          
  1. Create two feature branches(feature/refactor-multiply & feature/change-multiply). we will assume they are 2 separate developers working on project. One of them will refactor project by renaming a method across whole project, while other developer is still working with old name.
git checkout develop
git checkout -b feature/refactor-multiply
git checkout develop
git checkout -b feature/change-multiply
  1. From feature/refactor-multiply branch, rename "multiply" method to "product" everywhere.
git checkout feature/refactor-multiply
# TODO: rename method "multiply" to "product" every where(BasicCalculator,ReportGenerator, test class, ...)
git add .
git commit -m "refactor: renamed multiply to product"
git checkout develop
git merge feature/refactor-multiply      
  1. From feature/change-multiply branch, change the body of multiply method
git checkout feature/change-multiply
# TODO: change the body of Calculator.multiply (e.g., loop-based multiplication)
git add .
git commit -m "multiply method body changed"
git checkout develop
git merge feature/change-multiply        # CONFLICT
  1. Resolve the conflict
# TODO: Open conflicted file(s), decide to keep the `product` name, and apply the new logic.
git add .
git commit -m "conflict resolved: keep rename, apply new multiply logic"

📦 Task 2 Deletion Conflict

Scenario

Two developers are working on the same interface:

  • Developer A decides that the Calculator interface is no longer needed and deletes it from the project.
  • Developer B is still working on the interface and adds a new method to it.

When the branches are merged, Git will detect a modify/delete conflict because one branch deleted the file while the other modified it.

  1. Create Two branches called feature/remove-calculator and feature/add-method-to-interface. We will delete interface file in project in first branch, while second one is working on it. Then we will solve conflict that happends in merging.
git checkout develop
git checkout -b feature/remove-calculator
git checkout develop
git checkout -b feature/add-method-to-interface
  1. From feature/remove-calculator branch, delete interface file completely:
git checkout feature/remove-calculator
git rm src/main/java/com/ap/Calculator.java
git commit -m "remove Calculator interface"
git checkout develop
git merge feature/remove-calculator
  1. From feature/add-method-to-interface add method to deleted interface
git checkout feature/add-method-to-interface
# TODO: add "double calculateArea(double a,double b)" to Calculator, implement in BasicCalculator
git add .
git commit -m "add calculateArea() method"
git checkout develop
git merge feature/add-method-to-interface   # CONFLICT 
  1. Resolve
  • Keep the Calculator interface with new added calculateArea() method.
git commit -m "resolved: Restored deleted interface and added calculateArea "

📤 Deliverable

  • Push your branches with all merge commits.
  • Show output of your git history:
git log --oneline --graph --all --decorate