Как я могу подготовить и зафиксировать все файлы, включая вновь добавленные, с помощью одной команды?

425

Как я могу подготовить и зафиксировать все файлы, включая вновь добавленные, с помощью одной команды?

Ананта Кумаран
источник
3
Огорчает то, что раньше это было возможно и было стандартным синтаксисом для фиксации и добавления любых новых файлов: git commit -a Но при правильном формировании синтаксис git изменился. Это смутило существующих пользователей (и сломало их скрипты), устранило полезную функциональность и заменило ненужный флаг.
Fijiaaron
1
Есть дубликат этого в git add -A, git commit в одной команде? , Принятый ответ здесь аналогичен принятому ответу, но предлагает создать псевдоним git, чтобы сократить время ввода (и показывает, как это сделать).
Марк Амери
Возможный дубликат добавления и фиксации Git в одной команде
Лучано

Ответы:

568

Имеет ли

git add -A && git commit -m "Your Message"

считать "единой командой"?

Редактировать на основе ответа @ thefinnomenon ниже :

Чтобы иметь это как git alias, используйте:

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

и передайте все файлы, включая новые, с сообщением:

git coa "A bunch of horrible changes"

Пояснение (из git addдокументации ):

-A, --all, --no-игнорировать-удаление

Обновите индекс не только там, где в рабочем дереве есть соответствие файла, но также там, где в индексе уже есть запись. Это добавляет, изменяет и удаляет записи индекса в соответствии с рабочим деревом.

Если не задано no <pathspec>при использовании опции -A, обновляются все файлы во всем рабочем дереве (старые версии Git использовались для ограничения обновления текущим каталогом и его подкаталогами).

Ян Клелланд
источник
3
как насчет сообщения коммита?
Нарендра Джагги
11
@NarendraJaggi git add -A && git commit -m "Твое сообщение"
Dr.jacky
1
можно поместить это в свой собственный файл .sh или .bat и просто использовать его как одну команду. Сообщение может быть param1
BlueWizard
А также вы можете добавить ярлыки для основных команд git в ваш .bashrc: псевдоним gpl = 'git pull' псевдоним gps = 'git push' псевдоним gc = 'git commit' псевдоним gs = 'git status' псевдоним gd = 'git diff' псевдоним ga = 'git add' псевдоним gck = 'git checkout' псевдоним gb = 'git branch' псевдоним gl = 'git log' псевдоним lcp = 'git format-patch -1 HEAD' псевдоним resetToMaster = 'git reset --hard origin / master '
ni3
3
В powershell заменить "&&" на ";" запустить обе команды, например так:git add -A ; git commit -m "Your Message"
Рафаэль
415

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

git commit -am  "<commit message>"

От человека гит-коммит:

   -a, --all
       Tell the command to automatically stage files that have been modified
       and deleted, but new files you have not told Git about are not
       affected.
Джай Керти
источник
101
Это на самом деле не отвечает на вопрос, на самом деле конкретно (не менее жирным шрифтом) исключается одна из ключевых частей искомого решения.
Арунас
6
Не добавляет и не фиксирует неотслеживаемые файлы.
b15
3
Но он охватывает наиболее типичную ситуацию, когда вы фиксируете после «git add -A» и замечаете, что вы забыли изменить что-то маленькое в коде. Я ненавижу писать одно и то же сообщение о
коммите
но
автор
А также вы можете добавить ярлыки для основных команд git в ваш .bashrc: псевдоним gpl = 'git pull' псевдоним gps = 'git push' псевдоним gc = 'git commit' псевдоним gs = 'git status' псевдоним gd = 'git diff' псевдоним ga = 'git add' псевдоним gck = 'git checkout' псевдоним gb = 'git branch' псевдоним gl = 'git log' псевдоним lcp = 'git format-patch -1 HEAD' псевдоним resetToMaster = 'git reset --hard origin /мастер'
ni3
26

Я использую эту функцию:

gcaa() { git add --all && git commit -m "$*" }

В моем файле конфигурации Zsh, так что я могу просто сделать:

> gcaa This is the commit message

Автоматически ставить и фиксировать все файлы.

phlppn
источник
1
для bash-likefunction gcaa() { git add --all && git commit -m "$*" && git push }
Дамилола
1
@Damilola - что ты имеешь в виду под bash-like ? синтаксис в ответе работает и в bash
Элиран Малка
это хорошо, я раньше использовал псевдоним, как, gaa && gc -m "my commit"но это намного приятнее ... <поспешил изменить bashrc ..>
andy mccullough
24

Один вкладыш для размещения ВСЕХ файлов ( измененных , удаленных и новых ) и фиксации с комментарием:

git add --all && git commit -m "comment"

http://git-scm.com/docs/git-add
http://git-scm.com/docs/git-commit

Ярина
источник
одна строка, но не одна команда (о чем спрашивал ОП)
Элиран Малка
24

Не уверен, почему все эти ответы танцуют вокруг того, что я считаю правильным решением, но то, что он стоит здесь, это то, что я использую:

Создать псевдоним:

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

Добавить все файлы и зафиксировать с сообщением:

git coa "A bunch of horrible changes"

ПРИМЕЧАНИЕ: coaэто сокращение от «совершать все» и может быть заменено всем, что душе угодно

thefinnomenon
источник
1
Никакой ответ, кроме этого, успешно упрощает процесс передачи всех сообщений.
Сеф Рид
2
Это круто, искал git aliasпуть, остальное скучно.
Qortex
9

Фиксация в git может состоять из нескольких шагов или одного шага в зависимости от ситуации.

  1. В этой ситуации вы обновили несколько файлов и хотите зафиксировать:

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

    git add -A
    

    или

    git add --all
    
  2. После этого вы можете использовать коммит всех добавленных файлов

    git commit
    

    с этим вы должны добавить сообщение для этого коммита.

Король линукс
источник
6

Если вы просто хотите «быстрый и грязный» способ сохранить изменения в текущей ветке, вы можете использовать следующий псевдоним:

git config --global alias.temp '!git add -A && git commit -m "Temp"'  

После выполнения этой команды вы можете просто набрать, git tempчтобы git автоматически зафиксировал все ваши изменения в текущей ветке как коммит с именем «Temp». Затем вы можете использовать git reset HEAD~позже, чтобы «отменить» изменения, чтобы продолжить работу над ними, или git commit --amendдобавить больше изменений в коммит и / или дать ему правильное имя.

Ajedi32
источник
4

У меня в конфиге два псевдонима:

alias.foo=commit -a -m 'none'
alias.coa=commit -a -m

если мне лень, я просто фиксирую все изменения

git foo

и просто сделать быстрый коммит

git coa "my changes are..."

coa означает «совершить все»

SystematicFrank
источник
9
Я бы не хотел работать с репозиторием, заполненным сообщениями коммита «Нет», и я бы также отклонял любые PR на этой основе. К сожалению, единственный способ узнать важность наличия хороших коммит-сообщений - это когда вам нужно вернуться, чтобы проверить что-то написанное давным-давно («эта строка вызывает ошибку ... почему она была даже добавлена, и будет ли что-нибудь сломать, если я его поменяю / уберу? ").
gregmac
1
Комитеты с «none» никогда не предназначены для длительного проживания. Обычно я запускаю свою собственную ветку функций, выполняю микро-коммиты и делаю их более разумными перед слиянием. Очевидно, что люди, которые делают коммиты для каждой модифицированной функции и не возражают против полноценного журнала git, не нуждаются в этом.
SystematicFrank
1
Я использую «wip» (сокращение от «работа в процессе») вместо «none» для этой цели, и я только помещаю такие коммиты в свои частные ветки.
Сергей Кошчеев
Это по-прежнему бесполезно, потому что в конечном итоге те коммиты "wip" или "none" превратят его в ветку, которую видят другие люди, и будут загрязнять журнал сообщений. Если вы раздавили все свои коммиты до того, как нажали, это было бы приемлемо, но в остальном это все равно раздражает команду.
Иордания,
Это отличная идея, и, сочетая ее со следующим ответом, вы можете получить 100% точный ответ для ОП. Я на самом деле изложил необходимые шаги (используя git-bash) в своем ответе. ( stackoverflow.com/a/43442269/869239 )
VeRo
3

Запустите данную команду

git add . && git commit -m "Changes Committed"

Однако, даже если кажется, что это одна команда, это две отдельные команды, запускаемые одна за другой. Здесь мы просто привыкли &&их объединять. Это не сильно отличается от бега git add .и git commit -m "Changes Committed"отдельно. Вы можете запустить несколько команд вместе, но последовательность имеет значение здесь. Как, если вы хотите отправить изменения на удаленный сервер вместе с подготовкой и фиксацией, вы можете сделать это, как указано,

git add . && git commit -m "Changes Committed" && git push origin master

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

&& запускает вторую команду в строке, когда первая команда возвращается успешно или с уровнем ошибки 0. Противоположность && является|| , что вторая команда выполняется, когда первая команда не выполнена, или с уровнем ошибки 1.

В качестве альтернативы, вы можете создать alise as git config --global alias.addcommit '!git add -a && git commit -m'и использовать его какgit addcommit -m "Added and commited new files"

Киран Мания
источник
2

Отличные ответы, но если вы ищете одну строку, делайте все, вы можете объединить, псевдоним и наслаждаться удобством:

git add * && git commit -am "<commit message>"

Это одна строка, но две команды, и, как уже упоминалось, вы можете использовать псевдонимы этих команд:

alias git-aac="git add * && git commit -am " (пробел в конце важен), потому что вы собираетесь параметризировать новую короткую команду.

С этого момента вы будете использовать этот псевдоним:

git-acc "<commit message>"

Вы в основном говорите:

git, добавьте для меня все неотслеживаемые файлы и передайте их с помощью данного сообщения коммита.

Надеюсь, вы используете Linux, надеюсь, это поможет.

Веро
источник
0

Вы можете написать небольшой скрипт (посмотрите на ответ Яна Клелланда), git-commitallкоторый использует несколько команд git для выполнения того, что вы хотите сделать.
Разместите этот скрипт в любом месте вашего $PATH. Вы можете позвонить по этомуgit commitall ... очень удобно!

Нашел здесь (вопрос и все ответы к сожалению удалены, виден только с высокой репутацией)

tanascius
источник
Вся тема - хорошее чтение ... вот почему я связал ее ^^
tanascius
@Dimitri - к сожалению, некоторые изумительные люди решили удалить эту полезную ветку. Это все еще видно с высокой репутацией, поэтому я держу ссылку здесь.
танкасиус
0

попробуйте использовать:

git add . && git commit -m "your message here"
Фотон
источник