DEV Community

Rahul Sharma
Rahul Sharma

Posted on Edited on

Single shell script command to stage all files, commit and push to current branch

Hey all!

This is my first post in here; so please bear with me. :)

Background

I used to use sourcetree for working with GIT; lately it is consuming a lot of RAM and CPU resources, GIT extensions is another client that is nice and light weight. But working directly with command line feels liberating, I am mostly able to understand and learn on what is exactly going on with command line instead of a GUI.

Earlier I used to use just my laptop for work and desktop for personal work. Due to the pandemic we all mostly work from home. In my case I keep switching between PC and desktop.

First good step was that I moved all my personal projects to Github. πŸ’‘

Problem

Due to use of multiple computers and GIT, usage of the 3 powerful commands increased (git add, commit and push). And sometimes I just want to push changes with default commit message to save my work.

  1. Stage all files:

    git commit .
    
  2. Add commit

    git commit -m {commit message}
    
  3. Push changes to current branch, in this case master

    git push origin master
    

I am sometimes lazy to type and execute the 3 commands. What I want is ability to do this in a single command. πŸ˜…

Scripting for the rescue

This was an opportunity to learn some automation and execute this with a single command, found that I could use some shell scripting. πŸ˜‡

I created a bash file that can help me with this minor inconvenience:

With this script I can now run command from command line as: sh expressPush.sh "My commit message", It does the following:

  1. Stages all files
  2. Adds a commit with provided message (My commit message) as an argument.
  3. Reads current branch name and executes a git push.

Additionally command is executed without a message as: sh expressPush.sh, this uses current date time stamp for message. I use this when message is not relevant.

Now its not nice to copy this file in every project. 😩

Make the script available to projects

As most my project have a package.json file, I can store this shell script in a local folder and add a script for this in each project, package.json looks would like below:

"scripts": {
    "expresspush": "sh 'E:\\GITUtils\\expressPush.sh'"
}
  • Now we can simply run npm run expresspush "My commit message" or npm run expresspush within the project directory.

This is good enough but has a problem with dependency as this assumes or hardcodes the directory of shell script file in package.json. And not all projects may based on npm. πŸ˜“

Make the script available globally 🀩

Learnt later that we can alias the shell script file to make the command available globally.

To do so, create or update .bashrc file in directory: C:\Users\username and add:

alias expresspush='sh "E:\GITUtils\expressPush.sh"'

Now we can simply run the script with alias from command line in any GIT project:

  • expresspush or expresspush "My commit message"

Closing:

This solved my problem. If you have any thoughts or suggestions to improve, please do let me know. πŸ‘‹πŸΌ

Top comments (4)

Collapse
 
vonheikemen profile image
Heiker

Have you tried making a "custom command" for git?

You could try make one like it says on this article: Extending Git.

Collapse
 
forcetrekker profile image
Rahul Sharma

This looks quite interesting and thanks for sharing with me, I will give this try! :)

Collapse
 
forcetrekker profile image
Rahul Sharma

Custom command felt hard and unfortunately I could not make it work. So I created an alias in .bashrc and it worked like charm. :)

Collapse
 
maheshhirugade profile image
Mahesh Hirugade

That's a nice trick to save push efforts every time. Thanks @rahul