Git commit -a «неотслеживаемые файлы»?


93

Когда я делаю git commit -a, я вижу следующее:

  # Please enter the commit message for your changes. Lines starting
  # with '#' will be ignored, and an empty message aborts the commit.
  # On branch better_tag_show
  # Changes to be committed:
  #   (use "git reset HEAD <file>..." to unstage)
  #
  # modified:   ../assets/stylesheets/application.css
  # modified:   ../views/pages/home.html.erb
  # modified:   ../views/tags/show.html.erb
  # modified:   ../../db/seeds.rb
  #
  # Untracked files:
  #   (use "git add <file>..." to include in what will be committed)
  #
  # ../assets/stylesheets/
  # ../views/pages/

Что означают эти неотслеживаемые файлы? Все изменения действительно отслеживаются. Я не понимаю, почему git предупреждает меня о неотслеживаемых файлах.

ИЗМЕНИТЬ :

Хорошо, я вижу много запутанных ответов. Вот что происходит после git commit -aэтого.

# On branch master
nothing to commit (working directory clean)

Как видите, нет НИЧЕГО, кроме тех четырех файлов, к которым были применены изменения.

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

Другими словами, это неотслеживаемые предупреждение в мерзавца сообщение фиксации ненужными ?


1
(use "git add <file>..." to include in what will be committed)
zengr

1
zengr, в этом нет необходимости, потому что git commit -a зафиксирует все изменения в файлах, которые были отслежены.
исчез

3
Это является необходимым , когда файлы никогда не были addэд до сих пор. Из документации для -a: Укажите команде, чтобы автоматически обрабатывала файлы, которые были изменены и удалены, но новые файлы, о которых вы не сообщили git, не затрагиваются .
Нуфал Ибрагим

Почему вы говорите, что git «предупреждает» вас? На мой взгляд, сообщение о «неотслеживаемых» файлах носит информационный характер. Вам нужно увидеть, нужно ли управлять этими файлами, и действовать соответствующим образом.
сатиш

@sateesh Ну, как бы вы это ни называли, я все еще не думаю, что это действительно полезно. Насколько это информативно? Что я должен сделать? Вы читали мое сообщение в разделе «РЕДАКТИРОВАТЬ», где я написал, что нет никаких изменений ни в одном другом файле, кроме перечисленных выше? Если вы найдете это информативным, это эквивалентно тому, что я говорю вам, что любая случайная папка в вашем дереве репо не будет отслеживаться, если не о чем беспокоиться.
исчез

Ответы:


105

Если у других такая же проблема, попробуйте запустить

git add . который добавит все файлы текущего каталога для отслеживания (включая неотслеживаемые), а затем будет использовать

git commit -a для фиксации всех отслеживаемых файлов.

Как предлагает @Pacerier, один лайнер, который делает то же самое, -

git add -A


5
git commit -aбудет фиксировать все отслеживаемые файлы, а не отслеживать неотслеживаемые файлы. git add .будет отслеживать неотслеживаемые файлы в текущем каталоге. git add -aбудет отслеживать все неотслеживаемые файлы.
здесь

@matteo это git add -Aне так git commit -A. Насколько я могу судить, вы не можете перейти к переключателю, git commitкоторый включает неотслеживаемые файлы.
Лен

1
-a, похоже, не рекомендуется сейчас только для A. Все же разрешите поблагодарить вас. :)
tcratius

Для получения дополнительной информации об этих командах вы можете проверить: stackoverflow.com/questions/572549/…
Онат Коручу

30

git commit -am "msg"не то же самое, что git add fileиgit commit -m "msg"

Если у вас есть файлы, которые никогда не добавлялись в отслеживание git, вам все равно нужно сделать git add file

Команда «git commit -a» - это ярлык для двухэтапного процесса. После того, как вы измените файл, который уже известен репозиторию, вам все равно нужно сказать репо: «Эй! Я хочу добавить это в подготовленные файлы и в конечном итоге передать вам ». Это делается с помощью команды «git add». «Git commit -a» помещает файл и фиксирует его за один шаг.

Источник: "git commit -a" и "git add"


но, как вы сказали, git commit -a = git add. + git commit, почему бы ему автоматически не добавить файл в область отслеживания ?? ....
Джонни

1
@Johnny: git commit -aне равно git add .+ git commit. Этот git addшаг добавляет только те файлы, которые указаны как измененные в вашем git status, а не все в текущем каталоге.
Сорен Бьорнстад,

Да, я обнаружил это сегодня!
KansaiRobot

9

Вы должны ввести в командной строке

git add --all

Это зафиксирует все неотслеживаемые файлы

Редактировать:

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

git commit -am "Your commit message"

5
Это этапы все файлы, не совершающие их. Вам все равно придется делать это отдельно.
Saeb Amini

8
  1. Сначала вам нужно добавить все неотслеживаемые файлы. Используйте эту командную строку:

    git add *

  2. Затем выполните фиксацию с помощью этой командной строки:

    git commit -a


7

Если у вас возникают проблемы с неотслеживаемыми файлами, вам поможет этот трехстрочный скрипт.

git rm -r --cached .
git add -A
git commit -am 'fix'

Тогда просто git push


Меня это беспокоит, потому что мне нужно было отследить отслеживаемые файлы, которые я сейчас игнорирую.
Spyder Man

2

Как следует из названия, «неотслеживаемые файлы» - это файлы, которые не отслеживаются git. Они не находятся в вашей области подготовки и не были частью каких-либо предыдущих коммитов. Если вы хотите, чтобы для них была установлена ​​версия (или чтобы ими управлял git), вы можете сделать это, указав «git» с помощью «git add». Проверьте эту главу « Запись изменений в репозиторий» в книге Progit, в которой наглядно показано, как записывать изменения в репозиторий git, а также объясняются термины «отслеживаемый» и «неотслеживаемый».


0

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


Это не дает ответа на вопрос. Чтобы критиковать или запросить разъяснения у автора, оставьте комментарий под его сообщением. - Из
отзыва
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.