visit
Git is the most popular source control system with an incredible 93.87% of adoption by developers (according to StackOverflow's 2022 Survey). It's a really powerful system with lots of hidden features not known by most of us developers.
In this post, I'll show some of these features that will make your work easier when using Git.
Git has a default disposition of keeping data unless it’s explicitly thrown away; this extends to holding onto local references to branches on remotes that have themselves deleted those branches.If left to accumulate, these stale references might make performance worse on big and busy repos that have a lot of branch churn, and e.g. make the output of commands like git branch -a --contains <commit> needlessly verbose, as well as impacting anything else that’ll work with the complete set of known references.
To remove local branches that have no remote-tracking references while fetching all branches, instead of using the --all
parameter, use the --prune
parameter:
git fetch --prune
git checkout branch-to-merge-from
git pull
git checkout my-working-branch
git merge branch-to-merge-from
Git branches are just references to a commit. When we make a fetch, the remote branches are created locally with a origin/
prefix, so there is no need to check out the branch-to-merge-from
before merging.
ℹ️ The remote branch prefix depends on the remote name, but the default is
origin
.
The following works without having to checkout and pull in the local branch branch-to-merge-from
:
git fetch --prune
git merge origin/branch-to-merge-from
git commit --allow-empty -m 'Empty commit'
git push
When working on a feature, we often need to check a file in another branch, for example, in the production branch (main). Some Git services offer a web interface that makes it easier to look for files in specific branches, but if you don't have this option, Git can show the file in the command line without having to switch branches, using the show
command followed by the branch name and the path to the file.
git show main:src/Program.cs
# Show the program.cs file in the previous commit
git show HEAD~1:src/Program.cs
To switch back to the previously checked-out branch, just pass -
as the branch parameter:
git checkout develop
git checkout main
git checkout - #Checkout the develop branch
If you want to search for a string in your repository, use the git grep
command.
To look for the string in all commits, provide the list of commits to git grep
using the git rev-list --all
command as shown below:
# Search for the word "git" in all files of all commits
git rev-list --all | xargs git grep "git"
Git can show the commit logs in the form of a graph in the command line. For this, use the --graph
parameter of the git log
command.
ℹ️ Pass the
--oneline
parameter to show the commit hash and commit message in one line, and make it easier to read the graph.
git log --graph --oneline
git log --graph --oneline systemcontext.md