Зафиксируйте и автоматически добавьте все необработанные файлы
Я часто забывал, что у меня есть несколько новых файлов и прямо,
git commit -a -m "My commit message"
Это только фиксирует измененные файлы, и я должен добавить оставшиеся файлы в новый коммит. Это означает, что есть две отдельные фиксации, хотя логически они являются частью одной и той же задачи.
Самый простой способ, по которому я знаю, включать нефиксированные файлы в commit через две последовательные команды:
git add -A
git commit -a -m "My commit message"
Возможно ли иметь один и тот же эффект, как указано выше, в одной команде?
Ответы
Ответ 1
Создайте файл в указанном пути выполнения (без расширения): git-add-commit-untracked
Поместите это в него:
#!/bin/bash
message=${0}
git add -A
git commit -am "$message"
Тогда:
git-add-commit-untracked "Commit message"
Однако вы можете использовать более короткое имя для файла. Я оставил его длинным для иллюстративных целей.
Ответ 2
Вы можете определить псевдоним, чтобы добавить все до фиксации. Просто поместите эти строки в файл ~/.gitconfig:
[alias]
ca = !sh -c 'git add -A && git commit -m \"$1\"' -
Затем используйте свой псевдоним следующим образом:
$ git ca 'Your commit message'
Ответ 3
Вот несколько вариантов:
- Используйте
git commit --amend
, чтобы вы получили только одну фиксацию после добавления необработанных файлов (но не если вы уже нажали предыдущую фиксацию);
- Используйте
git commit --interactive
;
-
Создайте псевдоним или script, который автоматически добавит новые файлы (примеры в других ответах). Вот два псевдонима, которые я использую именно для этой цели:
[alias]
untracked = ls-files --other --exclude-standard
add-untracked = !git add $(git untracked)
-
Выполните сквош своих двух коммитов, используя git rebase -i
, git reset <commit prior to first commit>
и git commit
, или git merge --squash
в другую ветку.
Однако вы не можете переопределить встроенную команду, например commit
, с псевдонимом, поэтому вам все равно не нужно добавлять файлы, которые вы хотите индексировать, прежде чем совершать.
К сожалению, вы не можете указывать пути вместе с git commit -a
; Я просто попробовал git commit -a $(git untracked)
, и он сказал мне fatal: Paths with -a does not make sense.
Чтобы ответить на ваш основной вопрос, я думаю, что git script будет единственным неинтерактивным способом.
Ответ 4
Невозможно использовать интерфейс git
по умолчанию. Однако git
поддерживает псевдонимы.
Используя псевдоним, можно вызвать другую команду git или даже запустить произвольные сценарии оболочки. Создайте script, содержащий две команды, и укажите его.
Смотрите вики для получения дополнительной информации о псевдонимах и этот вопрос для этот конкретный сценарий.
Изменить: обратите внимание, что это не такая хорошая идея. Вероятно, вы в конечном итоге добавляете ненужные файлы по ошибке или имеете бесполезный псевдоним из-за не-версий файлов в дереве.
Ответ 5
Да, у меня была такая же проблема, как и вы в прошлом. Я предпочитал использовать команду git, но у меня возникли большие проблемы, потому что охранник в рельсах менял много файлов без предупреждения:)
Итак, всякий раз, когда я совершаю новый код, я пытаюсь использовать UI для этого (git gui) и не забывайте использовать git commit -a
, потому что вы не знаете, какие файлы были изменены!
После перезагрузки нового кода, пожалуйста, gitk
, чтобы просмотреть дерево git, чтобы вы могли узнать о последних обязательствах, коммиттерах, файлах фиксации и т.д.