Git добавить и зафиксировать в одной команде

392

Есть ли способ, которым я могу сделать

git add -A
git commit -m "commit message"

в одной команде?

Кажется, я много выполняю эти две команды, и если бы у Git была такая опция git commit -Am "commit message", это сделало бы жизнь намного удобнее.

git commitимеет -aмодификатор, но он не совсем то же самое, что и git add -Aперед фиксацией. git add -Aдобавляет вновь созданные файлы, но git commit -amне делает. Что значит?

Четан
источник
4
возможный дубликат Git Зафиксируйте все файлы, используя один cmd
Mr_and_Mrs_D
1
экономия времени и фиксация каждого изменения лучше, поэтому я использую git commit -am"yes the code in committed"
Rizo
git add .это более быстрый вариант для добавления всех
Райан

Ответы:

419

Вы можете использовать псевдонимы git, например

git config --global alias.add-commit '!git add -A && git commit'

и использовать его с

git add-commit -m 'My commit message'

РЕДАКТИРОВАТЬ: Возврат к тикам ('), иначе это не удастся для расширения оболочки в Linux. В Windows следует использовать двойные кавычки (") вместо этого (указано в комментариях, не проверено).

Мартин С.
источник
24
Используйте git config --global --unset alias.<your_alias>для сброса псевдонима.
TMOTTM
11
@MrFusion Делает команду внешней командой оболочки вместо ярлыка во внутренней команде git, т.е. делает всю строку выполняемой как отдельный процесс.
Мартин С.
8
Я предпочитаю, git config --global alias.add-commit '!git add -A && git commit -m'поэтому мне не нужно печатать -mкаждый раз.
Лампа накаливания
21
Мне лень набирать add-commit и -m каждый раз. Следовательно, я git config --global alias.ac '!git add -A && git commit -m' git ac 'comment'
печатаю
5
git config --global alias.add-commit "!git add -A && git commit"(т.е. двойные кавычки вместо одинарных кавычек) - это то, что работает в Windows.
Сахид
269
git commit -am "message"

это простой способ сказать git, что нужно удалить удаленные файлы, но я обычно не рекомендую использовать такие рабочие процессы. Git коммиты в лучшем случае должны быть достаточно атомарными и затрагивать только несколько файлов.

git add .
git commit -m "message"

это простой способ добавить все файлы, новые или измененные. Также применяется универсальная квалификация. Вышеуказанные команды не будут удалять файлы, удаленные без git rmкоманды.

git add app
git commit -m "message"

это простой способ добавить все файлы в индекс из одного каталога, в данном случае это appкаталог.

Джед Шнайдер
источник
41
или просто git commit -am "message"- просто убедитесь, что нет новых файлов, которые git еще не подобрал. в противном случае вам придется использовать git add . &&перед этим .... чтобы сделать это в одну строку.
courtimas
2
Извините, но оригинальный вопрос был именно об этом - избегать git add .в случае, если файлы были добавлены
gorn
50

Чтобы держать его в одной строке, используйте:

git add . && git commit -am "comment"

Эта строка будет добавлять и фиксировать все измененные и добавленные файлы в хранилище.

Алесь
источник
12
Следует отметить, что это характерно для оболочки Linux (bash и, возможно, другие).
Р. Мартиньо Фернандес
6
git commit -am "comment"идеально
Абхишек Беди
2
Если вы использовали: git add . Тогда вам не нужно использовать опцию -a , просто нужно:git commit -m "comment"
Duc Chi
18

Просто объедините ваши команды:

git add -A && git commit -m "comment" 
Ярина
источник
18

Только адаптируя Алесь игрового ответа и courtsimas игровой комментарий для Linux Баша :

Чтобы держать его в одной строке, используйте:

git commit -am "comment"

Эта строка добавит и зафиксирует все изменения в хранилище.

Просто убедитесь, что нет новых файлов, которые git еще не подобрал. в противном случае вам нужно будет использовать:

git add . ; git commit -am "message"

Данило
источник
Как это сделать git commit -am "comment", но только для 1 файла? Допустим, file.txt .
Сантош Кумар
git commit -am "comment"это ярлык для добавления и фиксации всех измененных файлов. Если вы хотите добавить и зафиксировать только 1 файл, вам нужно выполнить:git add file.txt ; git commit -m "comment"
danilo
Во втором случае нет необходимости добавлять -a с помощью m. Это должно быть мерзавец добавить. ; Git commit -m "message"
Маниш
12

В более поздней версии Git вы можете добавить и зафиксировать, как это

git commit -a -m "commit message"

Дополнительно вы псевдоним:

[alias]
    ac = commit -a -m

Тогда вы можете использовать это так:

git ac "commit message"
sirwinny
источник
6
Эта команда не будет фиксировать новые файлы, только обновленные.
Рувим,
11

На моем компьютере с Windows я установил этот .bashrcпсевдоним, чтобы сделать весь процесс более простым.

  • создать / найти свой .bashrc- см. тему
  • добавить следующую строку в файл

    alias gacp='echo "enter commit message : " && read MSG && git add . && git commit -m "$MSG" && git push'
    

    это делает git add commit и push. настроить его любым способом, скажем, вы не хотите, чтобы команда push удалила эту часть

  • перезагрузите .bashrc/ закройте и снова откройте вашу оболочку

  • Теперь вы можете сделать весь процесс с помощью gacpкоманды.
Sojan V Jose
источник
К вашему сведению, в этом есть сценарий git push. Не копируйте и не вставляйте это.
Яр
11

уверен, что вы можете использовать:

git commit -am "commit all the things"
Блэр Андерсон
источник
1
Эта команда является самым коротким и, вероятно, самым простым способом достижения требуемого результата. Тест на git версии 2.6.3.windows.1.
Ithar
5
Это не будет фиксировать только что добавленные файлы, только «обновленные»!
user13107
1
ПРАВИЛЬНО он не начнет отслеживать файлы, которые не отслеживаются
Блэр Андерсон,
@BlairAnderson - есть ли команда для добавления неотслеживаемых файлов также с помощью add и commit?
MasterJoe2
6

Если вы введете:

git config --global alias.a '!git add -A && git commit -m'

однажды вам нужно будет просто набрать

git a

каждый раз:

git a 'your comment'
Навид Вафаей
источник
4
это должен быть самый лучший ответ, очень простой и включающий в себя файлы UNTRACKED в отличие от большинства других предложений.
ДжессиБойд
6

Просто используйте:

git commit -m "message" .     

Обратите внимание на "." в конце ... который также может быть путем к файлу / каталогу

Джош Олсон
источник
это будет работать для вновь созданных файлов или только для существующих, которые были изменены?
MasterJoe2
5

Я делаю снаряд

#!/bin/sh

clear

git add -A 
git commit -a -m "'$*'"

сохранить, например, git.sh и позже вызвать:

sh git.sh your commit message
ademar111190
источник
1
не переносимый на другие ОС, и Git может сделать это сам, так какой смысл?
naught101
2
@ naught101 очевидно, что git может сделать это самостоятельно, дело в том, что эта оболочка служит для упрощения процесса для людей, использующих git на linux, намного проще запустить sh git.sh ваше сообщение коммита и не быть переносимым не значит, что он будет работать правильно.
ademar111190
5

У меня есть эта функция в моем .bash_profileили .profileили .zprofileили что-либо другое получено в оболочках входа в систему:

function gac () {
  # Usage: gac [files] [message]
  # gac (git add commit) stages files specified by the first argument
  # and commits the changes with a message specified by the second argument.
  # Using quotes one can add multiple files at once: gac "file1 file2" "Message".
  git add $1 && git commit -m "$2"
}
Ленар Хойт
источник
3

Вы можете использовать -a

git commit -h

...
Commit contents options
    -a, -all    commit all changed files
...

git commit -a # It will add all files and also will open your default text editor.
Друта Руслан
источник
2

Я надеюсь, что это кому-то поможет, и, пожалуйста, не стесняйтесь редактировать или улучшать. Я не уверен, что самый быстрый способ, но это, безусловно, упрощает мой процесс принятия кода с помощью «ohmyzsh» для Git .

https://ohmyz.sh/

  • git add . сокращено до ga .
  • git commit -m "message" сокращено до gc -m "message"
  • git push сокращено до gp

введите описание изображения здесь

dhahn
источник
1

Я использую следующее (оба находятся в стадии разработки, поэтому я постараюсь не забыть обновить это):

# Add All and Commit
  aac = !echo "Enter commit message:" && read MSG && echo "" && echo "Status before chagnes:" && echo "======================" && git status && echo "" && echo "Adding all..." && echo "=============" && git add . && echo "" && echo "Committing..." && echo "=============" && git commit -m \"$MSG\" && echo "" && echo "New status:" && echo "===========" && git status

# Add All and Commit with bumpted Version number
  aacv = !echo "Status before chagnes:" && echo "======================" && git status && echo "" && echo "Adding all..." && echo "=============" && git add . && echo "" && echo "Committing..." && echo "=============" && git commit -m \"Bumped to version $(head -n 1 VERSION)\" && echo "" && echo "New status:" && echo "===========" && git status

С echo "Enter commit message:" && read MSGпартией, вдохновленной Sojan V Jose

Я хотел бы получить там if elseзаявление, чтобы я мог получить aacv, чтобы спросить меня, хочу ли я развернуть, когда это будет сделано, и сделать это для меня, если я наберу 'y', но я думаю, я должен поместить это в свой .zshrcфайл

avjaarsveld
источник
1

Я использую следующий псевдоним для добавления всех и принятия :

git config --global alias.ac '!git add -A && git commit -a'

Затем, набрав:

git ac

Я получаю окно vim, чтобы получить больше инструментов для редактирования моего сообщения коммита.

Гас
источник
Я должен подать в суд на вас за плагиат. :)
Navid Vafaei
Пожалуйста, объясните другую дополнительную информацию, которую дает ваш ответ, по сравнению с заметно более старым ответом Navid.
Yunnosch
@Yunnosch Полагаю, я не видел ответа Навида перед публикацией, поскольку он "слишком ленив": P, чтобы опубликовать его как полный ответ. Действительно, это то же самое, и на самом деле у меня есть этот псевдоним, так как давным-давно позаимствовал его у коллеги. Поэтому я думаю, что мы можем назвать это: цепь плагиата. Извините, если вас это беспокоит.
Гас
1

На случай, если кто-то захочет «добавить и зафиксировать» для одного файла, что было в моём случае, я создал скрипт, сделанный ниже:

#!/bin/bash

function usage {
    echo "Usage: $(basename $0) <filename> <commit_message>"    
}

function die {
    declare MSG="$@"
    echo -e "$0: Error: $MSG">&2
    exit 1
}

(( "$#" == 2 )) || die "Wrong arguments.\n\n$(usage)"

FILE=$1
COMMIT_MESSAGE=$2

[ -f $FILE ] || die "File $FILE does not exist"

echo -n adding $FILE to git...
git add $FILE || die "git add $FILE has failed."
echo done

echo "commiting $file to git..."
git commit -m "$COMMIT_MESSAGE" || die "git commit has failed."

exit 0

Я назвал его "gitfile.sh" и добавил его в свой $ PATH. Затем я могу запустить git add и commit для одного файла в одной команде:

gitfile.sh /path/to/file "MY COMMIT MESSAGE"
Бруно Неграо Зика
источник
0

Я использую этот псевдоним git:

git config --global alias.cam '!git commit -a -m '

Так что вместо звонка

git add -A && git commit -m "this is a great commit"

Я просто делаю:

git cam "this is a great commit"

Алехандро Силва
источник
0

Вы можете использовать git commit -am "[comment]" // лучшее решение или git add. && git commit -m "[comment]"

Гаурав Рати
источник
0

Сначала проверьте, какие псевдонимы у вас есть ...

git config --get-regexp alias

Если его там нет, вы можете создать свой собственный (ссылка: https://git-scm.com/book/en/v2/Git-Basics-Git-Aliases )

// git add

git config --global alias.a '!git add -A'

// git commit

git config --global alias.c '!git commit'

// git commit -m

git config --global alias.cm '!git commit -m'

// git add commit

git config --global alias.ac '!git add -A && git commit'

// git add commit -m

git config --global alias.acm '!git add -A && git commit -m'

Например, если вы используете последний ...

git acm 'My commit'
Круз Хурадо
источник
0
  1. Создайте псевдоним в bash: alias gac="git add -A && git commit -m"

    (Я решил назвать ярлык «gac», но вам не обязательно)

  2. Используй это: gac 'your commit message here'

Х. Альмидан
источник
0

Для серебряных спинок в толпе, которые привыкли к таким вещам, как Subversion ... сделать "коммит" в старом смысле слова (то есть - или, говоря git - добавить, зафиксировать и подтолкнуть) в Один шаг: я обычно добавляю что-то вроде следующего в корень моего проекта (как файл bat в Windows, например, git-commit.bat). Затем, когда я хочу добавить, зафиксировать и нажать, я просто набираю что-то вроде, git-commit "Added some new stuff"и все это идет к удаленному репо.

Кроме того, таким образом любой в проекте может использовать то же самое без необходимости что-либо менять локально.

Я также обычно запускаю git config credential.helper storeодин раз, поэтому мне не нужно давать uid / pwd при запуске.

::
:: add, commit, and push to git
::

@echo off
echo.
echo.
echo 
echo Doing commit...
git add -A && git commit -m %1
echo.
echo.
echo Doing push...
git push
echo.
echo.
echo Done.
echo.
Джон
источник
0

Это работает для меня всегда, пожалуйста, выполните следующие команды:

1.git add .
2.git commit -m "no bugs please"
3.git push origin *

где * основано на ветви, в которую вы нажимаете, и также всегда можно изменять сообщения коммитов в соответствии с контекстом.

Фредрик Окереке
источник
-1
  1. введите git add . && git commit -amи введите
  2. введите historyи введите
  3. запомните номер для вышеуказанной команды, скажем, номер 543
  4. Отныне, для каждого типа фиксации, !543 "your comment here"т.е. восклицательный знак + число, пробел и ваш комментарий.
Космос Нагиос
источник
4
Я не согласен с мнением, потому что это действительно странное решение, которое может разрушить вещи ужасным образом, когда ваша история истечет и эта 543-я команда станет чем-то другим.
bfontaine
-2

Этот результат - Попробуйте это: Простой скрипт одна команда для git add, git commit и git push

Откройте свой CMD в Windows и вставьте этот ответ

git commit -m "your message" . && git push origin master

Вот пример моего снимка экрана: https://i.stack.imgur.com/2IZDe.jpg

Ананг Ханафи
источник
-4

Чтобы держать его в одной строке, используйте:

gacm "your comment"
Сатиш Равула
источник
2
Не могли бы вы дать некоторую справку об этом или ссылку или что-то?
Гершом
7
Я думаю, что этот плакат работает с псевдонимами и не осознает этого. Чтобы вышеприведенное сработало, вам нужно добавить псевдоним оболочки, например alias gacm="git add .; git commit -m"или (желательно, я думаю), псевдоним git git config --global alias.gacm '!git add .;git commit -m'.
Mere Development