Amazing git commands and facts
I have been using git from quite some time, but there are certain amazing things about git that I learnt just recently.
1. Blaming with git blame
git blame gives the commit hash, author and time for every line in a file. This can be used to know who are the people who have contributed to that particular code and the commit hash too! It can also help figure out who added a particular line in a project which broke it, and then go blame them :P
2. Rectifying via git commit —amend
Ever been in a hurry and made a spelling mistake? That's exactly what is command is for! This can change the commit message for the last commit.
git commit --amend that would open the file in the default terminal text editor. Change the message, save and quit, and done!
Squash is not a command, but definitely a concept in itself. Imagine having changes in a file multiple times, which would make a lot of unnecessary commits. Now if any point of time, one needs to go back in history, doing that would be just plain painful with several commits cluttered. Squashing here comes to rescue!
Squashing means convert related commits to one commit. It's nothing but a kind of interactive rebase. for last
n commits you can do
git rebase -i HEAD~n. Here's how it goes:
This will open the commits in the default text editor. Instead of
pick in front of commit, type
squash for those commits you wish to squash.
Save and exit, you will get another file which asks the user to choose final commit messages. Type the appropriate message and delete other messages. Save an quit, it's squashed! \o/
While working on projects, things are in a messy state and you want to switch branches for a bit to work on something else. Now, you do not want to commit things half done(you need to commit everything before switching).
git stash comes to rescue!
Stashing takes the current state of your working directory and pushes it onto a stack of unfinished changes. Now you can switch branches! You can also apply the unfinished changes any time with
git stash apply
Tagging is a feature in git. For every software there are releases, now imagine if a software is released and development team is working for the next release. Meanwhile, there is a bug report with
severe priority. Now, hat needs to be fixed in the previous version! Remembering the last commit for each release is not a good idea. Git here offers the functionality!
It has the ability to tag specific points in a repository’s history as being important(releases). There are five basic commands:
git tag– will list all the tags in the project.
git checkout <tag_version>– jumps to the repository's state with the particular tag version.
git tag -a <version> -m '<commit message>– creates a tag with the version number and commit message.
git tag -d <tag_name>– deletes the tag from the list
- 'git push origin —tags` – pushes tags to the origin
6. Applying patches
A lot of open source work is done via mailing list. The kernel mailing list comes at the top of my head. A lot of commits are mailed as patches. These patches contain the diffs(git diff). They can be easily applied via
git apply <filename>. Now the code can be tested with the patch applied.
7. Short git status
Git has a short status flag so you can see your changes in a more compact way. If you run
git status -s or
git status –short you get a more simplified output from the command.
?? indicates the file hasn't been staged.
D indicates deleted file and there are a few other tags too.
8. Cloning can be done under a different name
You don't need to have a weird name that the upstream would have to your repository. You can always rename the directory while cloning. The syntax is:
git clone <upstream URL> <directory name>
Git is indeed a wonderful tool in itself. There's so much to learn. Hope you enjoyed reading the blog, :)