I want to automate the many version control steps of Git. I was successful until I used git commit -S -m ${var} in my Bash script. This line gives me (pathspec errors x # of word) - 1... unless I use eval. How does eval make my script work? 
I thought this article had the answer, but my issue involves a string, not an array.
Gif video of the broken vs. working Bash script
Broken code
brokenCommitCode () {
  # Give it a multi-word, space-separated message
  read -p 'Commit message (use quotes): ' commitMsg
  commitMsg="'${commitMsg}'"
  echo ${commitMsg}
  git add -A &&
  git commit -S -m ${commitMsg} 
}
Working code
workingCommitCode () {
  read -p 'Commit message (use quotes): ' commitMsg
  commitMsg="'${commitMsg}'"
  echo ${commitMsg}
  git add -A &&
  eval git commit -S -m ${commitMsg} 
}
I expected the brokenCommitCode to commit properly with the message I enter on the prompt. The actual result is a pathspec error when it reaches git commit -S -m ${commitMsg}. How does eval make this work?
I'm using GNU bash, version 4.4.19(1)-release (x86_64-pc-msys) with git version 2.16.2.windows.1 on a Windows 8.1 PC.
