ManUtdBloke
ManUtdBloke

Reputation: 453

Unable to create git alias?

I want to create a Git alias so I can run multiple commands at once.

I typed the following into the terminal:

git config alias.cleanpull "!git reset --hard HEAD; git clean -f; git pull"

I assumed that was the correct syntax but I get the following output immediately after entering the command (i.e. from defining the command, not actually running it):

git config alias.cleanpull "git config cleanpull.q "git push --all origin reset --hard HEAD; git clean -f; git pull" reset --hard HEAD; git clean -f; git pull"
usage: git config [<options>]

Config file location
    --global              use global config file
    --system              use system config file
    --local               use repository config file
    -f, --file <file>     use given config file
    --blob <blob-id>      read config from given blob object

Action
    --get                 get value: name [value-regex]
    --get-all             get all values: key [value-regex]
    --get-regexp          get values for regexp: name-regex [value-regex]
    --get-urlmatch        get value specific for the URL: section[.var] URL
    --replace-all         replace all matching variables: name value [value_regex]
    --add                 add a new variable: name value
    --unset               remove a variable: name [value-regex]
    --unset-all           remove all matches: name [value-regex]
    --rename-section      rename section: old-name new-name
    --remove-section      remove a section: name
    -l, --list            list all
    -e, --edit            open an editor
    --get-color           find the color configured: slot [default]
    --get-colorbool       find the color setting: slot [stdout-is-tty]

Type
    --bool                value is "true" or "false"
    --int                 value is decimal number
    --bool-or-int         value is --bool or --int
    --path                value is a path (file or directory name)

Other
    -z, --null            terminate values with NUL byte
    --name-only           show variable names only
    --includes            respect include directives on lookup

git: 'pull reset --hard HEAD; git clean -f; git pull' is not a git command. See 'git --help'.

Upvotes: 1

Views: 140

Answers (1)

Alexey Ten
Alexey Ten

Reputation: 14374

The problem here in shell (I guess you have bash, it's most common, but it could be csh or some other), not git. Bash threat ! symbol specially as a reference to command history. In order to use it literally you have to either escape it with backslash (\!)

git config alias.cleanpull "\!git reset --hard HEAD; git clean -f; git pull"

or use single quotes

git config alias.cleanpull '!git reset --hard HEAD; git clean -f; git pull'

For more info see section History Expansion in bash manual.

Upvotes: 3

Related Questions