Git Commands: Mastering Your Version Control Workflow

Hardik
CodeX
Published in
4 min readMay 28, 2024

Git is an immensely powerful version control system (VCS) that empowers developers to track changes, collaborate effectively, and maintain a clean codebase history. This guide dig into some fundamental Git commands that you’ll use frequently throughout your development journey.

1. Undoing Mistakes: git revert

Did you make a change you regret? Use git revert to create a new commit that effectively reverses the effects of the previous one.

  1. Identify the commit you want to revert using git log --oneline.
  2. Execute git revert COMMIT_ID, replacing COMMIT_ID with the actual commit hash.

2. Merging Branches: git merge

When multiple developers work on different aspects of the same project, merging branches combines their contributions into a single branch.

  • Ensure you’re on the branch where you want to integrate the changes.
  1. Run git merge branch-name, replacing branch-name with the name of the branch to be merged.

3. git stash.

To temporarily save changes in a dirty working directory:
git stash

4. git stash apply

To reapply the stashed changes to your working directory, use the following command:
git stash apply

5. git stash clear.

To remove all stashed entries:
git stash clear

6. Checking Differences

Examine the differences between files, branches, or commits using git diff.

  • Compare working directory changes: git diff
  • Compare a specific commit with your working directory: git diff COMMIT_ID
  • Compare two branches: git diff branch1 branch2

7. What is git rebase and how does git rebase work?

Rebasing is used to integrate changes from one branch into another branch. It applies the commits from one branch on top of another branch’s base.

git rebase BRANCH_NAME

8. Branching from a Specific Commit: git checkout -b

Create a new branch starting from a particular commit in your history.

  1. Identify the commit you want to use as the base using git log --oneline.
  2. Run git checkout -b new-branch-name COMMIT_ID, replacing new-branch-name with your desired branch name and COMMIT_ID with the actual commit hash.

9. Tagging Important Commits: git tag

Git tag is a mark of specific commit. Later, you can used as a reference.
Create a lightweight or annotated tag to mark a specific commit for future reference.

  • Lightweight Tag (simple name): git tag YOUR_TAG_NAME
  • Annotated Tag (with the message): git tag -a YOUR_TAG_NAME -m "Tag Description"
  • Viewing Tags: git tag -n
  • Deleting Tags: git tag -d TAG_NAME

10. Selective Merging: git cherry-pick

This command is very useful for developers. Like specific commits merge one branch to another branch.

  1. Move to the branch where you want to apply the commit.
  2. Use git cherry-pick COMMIT_ID to apply the commit identified by COMMIT_ID.

11. Viewing Git History: git reflog

git reflog provides a detailed log of all Git operations performed in your repository, including commands like checkout, merge, and rebase. This can be helpful for retracing your steps or recovering from mistakes.

12. Automating Merge Conflict Resolution: git rerere

Ever resolved a merge conflict and wished you could avoid the same pain next time? git rerere comes to the rescue! It helps automate repetitive merge conflict resolution based on how you handled them in the past.

  • How it works: git rerere automatically replays the conflict resolution steps from your previous encounters with similar conflicts, potentially saving you time and frustration.

13. Isolating Bugs: git bisect

Introduced a bug but can’t pinpoint the exact commit? git bisect acts like a detective, systematically isolating the commit that introduced the issue.

  1. Mark the “bad” commit (with the bug) and the “good” commit (where the code worked correctly).
  2. git bisect guides you through a series of steps, checking out commits in the middle of your history.
  3. Based on your feedback (whether the commit introduces the bug or not), git bisect narrows down the search until you identify the culprit.

14. Managing Multiple Workspaces: git worktree

Do you need to work on different parts of your codebase simultaneously while maintaining isolation? git worktree allows you to create multiple working directories for the same repository, each with its own independent branch checkout.

  • Use cases:
  • Working on multiple hotfixes or features concurrently.
  • Testing different versions of your project.

15. Integrating External Repositories: git submodule

Let's say your project relies on a smaller, independent codebase. Instead of copying it directly, git submodule enables you to include it as a submodule, keeping track of both your main project and the external codebase within your Git repository.

  • Benefits:
  • Simplified dependency management.
  • Maintain independence of submodules.

16. Batch Commands in Submodules: git submodule foreach

Need to execute a command across all submodules within your repository? git submodule foreach streamlines the process, applying the specified command to each submodule one after another.

  • Example: Update all submodules to their latest commits: git submodule foreach git pull origin master

17. Preparing for Commits: git update-index

While git add is typically used for staging files for commit, git update-index offers more granular control over the staging process. It allows you to add, remove, or mark specific file paths or patterns for inclusion in the next commit.

18. Housekeeping: git gc (Garbage Collection)

Over time, Git accumulates unnecessary data, such as references to deleted branches or objects. git gc (garbage collection) cleans up this data, keeping your repository efficient and reducing storage usage.

  • Regular maintenance: Run git gc periodically to optimize your repository.

In summary, these Git commands equip you with a powerful toolkit to manage your codebase effectively. From undoing mistakes to collaborating seamlessly, Git empowers you to navigate your development process with confidence. these advanced commands are best learned through practice. Keep exploring Git’s vast capabilities, and happy coding!

--

--

Hardik
CodeX
Writer for

Expert Ruby on Rails Developer | Shopify App Development