Though a lot of the Drupal community is using Git, I don't think everyone knows the tools I want to write about in this post. I can tell you, I cannot live without theme anymore:
- Git flow
- Git completion
-
Bash prompt with Git information

Git flow
Many of the newcomers to Git are struggling with the way to use branches for development, releases and hot-fixes. There is a great blog post of Vincent Driessen about this branching model that he calls Git flow. He developed a bunch of Git extensions to implement this branching model in Git. You can download those on Github. With this branching model it is very easy to create new feature or release branches without any effort or thinking. Just type:
git flow feature start myfeature
and start coding in your new feature branch. If the feature is to your liking and you want to push it back in the main develop branch just type
git flow feature finish myfeature
and Git flow will take care of the merging and deleting of the tag. The nice thing is, that you can start a new feature or release on any branch. There is a lot more to it, but I suggest just reading the blog post of Vincent Driessen to learn all about it. We are using this workflow at Triquanta now for some time and we can really recommend it.
Git completion
if you spend a lot of time in the shell as I do, it is very handy that you have auto completion for all sorts of things. I use bash and will show you what I use for auto completion for Git. If you use another shell it will not be that hard to adjust it for your environment.
I have 2 files in a folder called bash-completion.d in my home folder:
- git-completion.bash
- git-flow.bash
In my .bashrc file I have a line that loads those files
for f in ~/bash_completion.d/*; do source $f; done
Bash prompt
If I'm working in the shell I like it when my prompt gives me some information about where I am and what I'm doing. I have some lines in my .bashrc that will give me a prompt like this:

How handy is that! It will tell me on which branch I am, if there are staged (+) or unstaged (*) files etc. The functionality for this is also in the git-completion.bash. So if you installed that file, you will get this too Just paste the following code in your .bashrc in your home folder to get it:
PS1='\[\033[32m\]\u@\h\[\033[00m\]:\[\033[34m\]\w\[\033[31m\]$(__git_ps1)\[\033[00m\]\$ ';;
In the git-completion.bash file there is good documentation of the variables you can set to adjust what kind of information you see in your prompt. You can show if there are any untracked files, or if you are ahead or behind upstream for example.
If you have more tips on Git I would love to hear them of course.