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:

  • Why doesn't my git auto-update Expect script work?
  • “GIT_DIR=myproject.git git init” : What this command line doing on bash?
  • Bash or Python: How to download a single specified file from Github?
  • git branch | grep '^SomeThingInFrontOfLine' not working
  • Bash PS1 settings - how to get the current folder back as the terminal title
  • Bash and Git Flow bug in common file
  • $ ./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.

  • Download a Git repo from BitBucket
  • Why is not recommended to have an Eclipse project folder as a Git repository?
  • How to clear git caches?
  • I put stuff in my git repository that I shouldn't have
  • Git asks for username every time I push
  • Is there a way to make git flow show the commands it is executing behind the scenes?
  • 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.