Unlocking Git's Hidden Powers: 5 Configuration Tips
Tags: git, config, hacktoberfest23, opensource
Published: 2023-10-02 07:55:14

Version control is the backbone of modern software development, and mastering Git config can take your version control game to the next level.

Today I’m sharing a few tips to enable you to streamline your workflow and leverage the best out of our beloved Git, the Swiss Army knife of version control systems, and turn you into a Git guru.

## Tip 1: Conditional Configuration

In Git 2.13 and later, you can conditionally include another Git config file based on your Git directory or branch. This feature is incredibly handy when you need different configurations for various projects.

For instance, if you have a work-specific Git configuration, you can create a `.gitconfig.work` file and add or override configuration values as needed. Here's an example:
```
[user]
  email = john@personal.com
[includeIf "gitdir:~/work/"]
  path = .gitconfig.work
```
This way, when you're working within the `~/work` directory or its subdirectories, Git will pick up these specific configurations, making your work-related tasks a breeze.

## Tip 2: Set Default Branch To Main

By default, when you initialize a new Git repository, the initial branch is named 'master.'

However, there's a growing awareness of using more inclusive terminology, such as 'main,' as the default branch name. To make this change globally for all new repositories, you can use the following command:
```
git config --global init.defaultBranch <name>
```
This command updates your global `~/.gitconfig` file, aligning Git with the evolving best practices.

If you want to leave the default behavior but rename the branch after initialization, you can use the
```
git branch -m <name>
```

## Tip 3: Using External Diff and Merge Tools

Enhance your Git workflow by integrating external diff and merge tools like Beyond Compare or KDiff3. By configuring them in your gitconfig, you can seamlessly use these tools for resolving conflicts and comparing changes. Here's an example configuration:
```
[diff]
  tool = bc3
[difftool "bc3"]
    cmd = "bcomp \"$LOCAL\" \"$REMOTE\""
```
Now, Git will use Beyond Compare (or your preferred tool) whenever you run commands like `git difftool` or `git mergetool`.

## Tip 4: Use Git Aliases

Git aliases are your secret weapon for boosting productivity. They allow you to create shortcuts for frequently used Git commands. For example, you can create an alias called co that executes git checkout with just git co. Aliases are defined in your `~/.gitconfig` file, and they can replace one or more Git commands.

Here's an example alias configuration:
```
[alias]
  co = checkout
  ci = commit
  st = status
  br = branch
  hist = log --pretty=format:"%h %ad | %s%d [%an]" --graph --date=short
```
With these aliases in place, running git co is equivalent to git checkout, and git hist provides a custom, more informative git log output.

```
$ git hist
*   f790b78 2023-08-27 | feat: add footer #13 [user]

|\
| * 11d2d75 2023-08-27 | feat: implement new footer (origin/add-footer, add-footer) [user]
| * 091d895 2023-08-27 | feat: add footer component [user]
|/

*   e45725d 2023-08-27 | fix: minor style fixes #12 [user]
```

## Tip 5: Setting VS Code as Your Default Git Editor

If you're a fan of Visual Studio Code (VS Code), you can set it as your default Git editor to leverage its advanced features. To do this globally, you can run the following command:
```
git config --global core.editor "code --wait"
```
This command configures Git to use VS Code as the default editor, enhancing your Git experience when it comes to making commit messages or resolving merge conflicts.


![Config.tips the open source library of config tips and tricks](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1brazv17wp99ilrs7zcr.png)
Mastering Git config opens up a world of possibilities and efficiency. These five tips are just the beginning. If you're passionate about simplifying configurations and helping fellow developers, consider visiting and contributing to our open source library of config tips and tricks [Config.Tips](config.tips)

[Config.tips](config.tips) was born from the idea that collecting knowledge in one place could help make any type of config easier for developers.

If you like our project you can also give a star to [our Github repository](https://github.com/CircleCI-Public/Config.Tips).

We are one of the open source repos listed for Hacktoberfest so don’t be shy to make config even more accessible for everyone by [opening a pull-request with your config tip(s).](https://github.com/CircleCI-Public/Config.Tips/blob/main/.github/CONTRIBUTING.md)