DEV Community

Vinh Nhan
Vinh Nhan

Posted on

My First Git Merge: Learning How to Handle Branches

Hello! ๐Ÿ‘‹

This week, I focused on enhancing Barrierless, my CLI tool designed to translate files between languages. My main tasks this time were to implement two new features and practice managing multiple branches in Git. Hereโ€™s a detailed look at the process.

Step 1: Picking My Features

The two features I decided to implement were:

  1. Error Handling with Appropriate Exit Codes (Issue #16): Ensure that the program exits with the correct error codes and outputs helpful error messages via stderr. If no errors are present, the program exits with a code of 0. Otherwise, it exits with a non-zero code, like 1.

  2. Adding Support for Another Provider: Gemini (Issue #17): Currently, Barrierless only supports GROQCloud. For this task, I integrated the Gemini provider, expanding the tool's capability to support multiple translation engines, giving users more flexibility.

Step 2: Creating Topic Branches

After outlining my features, I created two new branches, one for each feature, to ensure that the changes were developed in parallel without conflict.

$ git checkout main
$ git checkout -b issue-16
$ git checkout -b issue-17
Enter fullscreen mode Exit fullscreen mode

This allowed me to work on each feature independently, ensuring that each set of changes stayed isolated until I was ready to merge.

Step 3: Implementing the Features

Issue #16: Error Handling with Exit Codes

I started with improving error handling. The goal was to make Barrierless more user-friendly by providing meaningful error messages and exit codes that can help identify the nature of issues quickly. For example, if an API key was missing from the .env file, the program would output an error to stderr and exit with code 1, while a successful run would return 0.

Issue #17: Adding Support for the Gemini Provider

Next, I integrated Gemini as an additional AI provider. This involved updating the code to allow users to select the provider through a command-line option -p, --provider. Now, users can specify whether they want to use GROQCloud or Gemini for translation tasks, enhancing the toolโ€™s flexibility.

Step 4: Merging the First Feature Branch

Once both features were complete, it was time to merge them into main. I started with issue #16 and performed a fast-forward merge since there were no changes on main since I branched off.

$ git checkout main
$ git merge issue-16
Enter fullscreen mode Exit fullscreen mode

This merge went smoothly without any issues.

Step 5: Merging the Second Feature Branch

Next, I attempted to merge issue #17:

$ git checkout main
$ git merge issue-17
Enter fullscreen mode Exit fullscreen mode

Since both branches modified some shared files, this merge required a three-way recursive merge. Since there was no conflicts, I was able to successfully merge the branches.

Step 6: Testing and Pushing to GitHub

After completing the merges, I thoroughly tested the main branch to ensure everything worked as expected. The error handling feature functioned correctly, and the provider switching logic seamlessly supported both GROQCloud and Gemini.

Once everything passed testing, I pushed the main branch to GitHub:

$ git push origin main
Enter fullscreen mode Exit fullscreen mode

Step 7: Closing the Issues

With the merges complete and tested, I closed issue #16 and issue #17 on GitHub.

Conclusion

This weekโ€™s work on Barrierless helped me sharpen my Git skills, particularly in handling multiple feature branches and resolving merge conflicts. Adding both error handling and support for the Gemini provider significantly improved the user experience and flexibility of the CLI tool. Iโ€™m excited to see how these enhancements will help users translate text files more efficiently.

Thank you for following along! Stay tuned for more updates on Barrierless!

Top comments (0)