DEV Community

Cover image for Mastering Git: 13 Advanced Techniques and Shortcuts for Efficiency
Anjan Karmakar
Anjan Karmakar

Posted on • Edited on

Mastering Git: 13 Advanced Techniques and Shortcuts for Efficiency

Ready to elevate your Git game? Whether you're a seasoned developer with years of experience or just starting out on your coding journey, mastering Git can significantly enhance your development workflow and productivity. This blog post dives into 13 advanced techniques and shortcuts to navigate Git with efficiency and ease.

  1. Combine add & commit: Streamline your workflow with git commit -am "<message>". This powerful command stages all modified files (meaning it adds them to the staging area for the next commit) and commits them with a provided message in one step. This is a great time-saver for simple changes where you're modifying multiple files and the message is clear.

Code Sample:

git commit -am "Fixed typo in main function"
Enter fullscreen mode Exit fullscreen mode
  1. Aliases: Tired of typing long and repetitive Git commands? Customize them for frequently used actions with aliases in your Git config. This ensures faster execution without compromising accuracy. Here's an example of creating an alias for git status:
git config --global alias.st status
Enter fullscreen mode Exit fullscreen mode

Now, you can simply type git st to check the status of your repository.

  1. Amend: Corrected a typo in your commit message? No sweat! Use git commit --amend to effortlessly update the message without creating unnecessary commits. This keeps your commit history clean and organized.

  2. Force Push (Use with Caution): Take control of the remote repository with git push --force. Important: This rewrites remote history irreversibly, so use it cautiously. This should only be used in specific situations, like fixing a mistake you accidentally pushed to the remote repository.

  3. Revert: Need to undo changes from a specific commit but want to preserve the overall history? Utilize git revert <commit_hash> to create a new commit that effectively undoes the changes introduced by the specified commit.

  4. Codespaces: Unleash the power of GitHub and Git operations directly from your web browser with Codespaces. This eliminates the need for local Git installations and enables seamless development and collaboration from anywhere with an internet connection.

  5. Stash: Temporarily set aside changes with git stash. This allows you to switch tasks without cluttering your commit history. Think of it like putting your current work on hold. Retrieve stashed changes with git stash list to see a list of your stashed changes and apply them selectively using git stash pop.

  6. Main Branch: Embrace modern Git practices by renaming your default branch to main. This aligns with industry standards adopted post-2020. You can use the command git branch -m master main to rename your master branch to main.

  7. Pretty Logs: Tired of scrolling through long lists of commits? Enhance readability of your commit history using git log --graph --oneline --decorate. This command provides a concise and visually appealing overview of your repository's changes, including branch names and authorship information.

  8. Bisect: Debugging a complex issue can be time-consuming. Debug efficiently by isolating problematic commits with git bisect. This powerful tool allows you to systematically analyze your codebase, narrowing down the commit that introduced the bug.

  9. Autosquash: Streamline commit management during feature development with git rebase --interactive. Utilize fixup and squash flags to automate the consolidation of commits. This can be helpful when you have a series of small commits related to a single feature and want to combine them into a single, cleaner commit.

  10. Hooks: Extend Git's functionalities by leveraging hooks to execute custom scripts before or after specific Git events. Consider tools like Husky for simplified hook configuration. Hooks can be used for various purposes, such as running automated tests or enforcing code style guidelines before a commit.

  11. Destroy Things (Safely): Always be cautious when modifying your Git history! Here's how to safely revert changes:

  • After a git fetch to update your local repository with remote changes, use git reset --hard HEAD^ to revert your local working directory to the state of the most recent commit on the remote branch (be aware that this discards any uncommitted changes).
  • Utilize git clean -f to remove untracked files (files that haven't been added to the Git repository) and restore repository cleanliness. Remember: Use these commands with caution, as they can lead to data loss if not used properly.

Bonus Tip: Checkout to Last: Quickly switch back to your previous branch with git checkout -. This eliminates the need to manually recall branch names and is

Top comments (5)

Collapse
 
mikizdr profile image
Мирослав Здравковић • Edited

Great guideline even for experienced users. One small note that is not related to Fit but GitHub: I always like protecting main branch from direct pushing commits to it but only via PRs.

Collapse
 
ccoveille profile image
Christophe Colombier • Edited

About git push --force, it should be use with caution, but its consequences could be reduced

Collapse
 
panvicka profile image
panvicka

(for git 2.23 and higher) for switching to previous branch you can also use git switch -. git checkout - can discard uncommitted changes to the files

Collapse
 
hrrarya profile image
Hridoy Mozumder

Instead of using Git aliases, I prefer setting up aliases through Bash.
Checkout to last is new to me.