Git commit bash script

I’m writing a bash script to add, commit, push all files in a directory.

git add .  
read -p "Commit description: " desc  
git commit -m $desc  
git push origin master

I’m getting the following error:

  • How to make quick backup of untracked files which I want to delete by git clean?
  • Reading output of git push from PHP exec() function
  • Is there any git bash with nice interface for Windows?
  • Git : Determine if branch is in a merge conflict state
  • How to effectively organize scripts so they can be put under version control?
  • sh: parse_git_branch: command not found
  • $ ./togithub  
    Commit description:   
    test commit script  
    error: pathspec 'commit' did not match any file(s) known to git.  
    error: pathspec 'script"' did not match any file(s) known to git.  
    Everything up-to-date

    I’m not sure if this is a problem with reading in the text (it echos fine) or passing it to git commit -m.

  • Getting started with hg quickly for a git user
  • How to control the order of fetching when fetching all remotes by git fetch --all
  • Escaping git bash after reflog, or commit, etc
  • Git squash commits in the middle of a branch
  • Use hook to force specific format of git commit message
  • git diff file against its last change
  • 6 Solutions collect form web for “Git commit bash script”

    You have to do:

    git commit -m "$desc"

    In the current script, test is going as commit message and commit and script are being treated as next arguments.

    Here’s a merge of the last two answers – chaining together the add -u is awesome, but the embedded read command was causing me troubles. I went with (last line used for my heroku push, change to ‘git push origin head’ if that’s your method):

    read -p "Commit description: " desc
    git add . && \
    git add -u && \
    git commit -m "$desc" && \
    git push heroku master

    it is helpful to remove from the index the files that have actually been deleted. git add -u takes care of this. Also, you may want to consider chaining these commands together like this:

    git add . && \
    git add -u && \
    git commit -m "$(read -p 'Commit description: ')" && \
    git push origin HEAD

    If any command fails, it will stop evaluating the remaining commands.

    Just food for thought (untested food).


    The following is a script that I use to mange my git repos – this will include the option to push to your origin branch, your staging site ( if setup ), and your production site ( if setup )

    #!/usr/bin/env bash
    # die script -- just in case
    die() { echo "$@" 1>&2 ; exit 1; }
    # kill message when dead 
     KILL="Invalid Command"
    # function to see where to push what branch
    pushing() {
        git branch
        sleep 1
        tput setaf 1;echo  What Branch?;tput sgr0 
        read -r branch
        tput setaf 2;echo  Where to? You can say 'origin', 'staging', or 'production';tput sgr0 
        read -r ans
        if [ "$ans" = "origin" ] || [ "$ans" = "staging" ] || [ "$ans" = "production" ]
            git push "$ans" "$branch" 
        elif [ "$ans" = "no" ]
            echo "Okay" 
        else die "$KILL"
    # function to see how many more times
    more() {
        tput setaf 2;echo More?;tput sgr0 
        read -r more
        if [ "$more" = "yes" ]
        elif [ "$more" = "no" ]
            die "Goodbye" 
        else die "$KILL"
    # get the root directory in case you run script from deeper into the repo
    gr="$(git rev-parse --show-toplevel)"
    cd "$gr" || exit
    tput setaf 5;pwd;tput sgr0 
    # begin commit input
    git add . -A
    read -r -p "Commit description: " desc  
    git commit -m "$desc"
    # find out if we're pushin somewhere
    tput setaf 2;echo  wanna do some pushin?;tput sgr0 
    read -r push 
    if [ "$push" = "yes" ]
        pushing # you know this function 
        until [ "$more" = "no" ]
            more # you know this function
    elif [ "$push" = "no" ]
        echo "Okay" 
    else die "$KILL"

    I tried to include as many comments as possible to help you understand what everything does.

    let me know if you have any questions.

    also, i have this setup like this

    echo "alias commit='sh /path/to/" >> ~/.bash_profile
    source ~/.bash_profile

    maybe this can help someone looking to accelerate workflow

    git pull
    git add .
    git commit -m "$*"
    git push

    call script with comment as cmd args, less keys to push:

    $ ./togithub test commit script 

    This is what i use most of the time to commit local branch and merge with remote branches:

    This little bash script allows you to add and commit on your local branch,
    checkout to another branch, merge with it and push it, and also checkout again to
    your local branch, so that you continue to work.

    read -p "Enter local branch [$default]: " local
    echo "Local branch is $local"
    if [ -z "$local" ]
        printf "Enter remote branch: "
        read remote
        if [ -z "$remote" ]
            printf "Cannot continue without remote branch!\n\n"
        git add .
        git add -u
        read -r -p 'Commit description: ' desc
        if [ -z "$desc" ]
            printf "\nExit: commit description is empty!"
        git commit -m "$desc"
        git checkout $remote
        git status
        git merge $local
        git push
        git status
        git checkout $local
        git status
        printf "\nEnd local commit on $local; merge and push to branch $remote. Well done!\n"
    Git Baby is a git and github fan, let's start git clone.