Почему "git commit" не сохраняет мои изменения?

Я сделал git commit -m "message" следующим образом:

> git commit -m "save arezzo files"
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   arezzo.txt
#       modified:   arezzo.jsp
#
no changes added to commit (use "git add" and/or "git commit -a")

Но потом, когда я делаю git status, он показывает те же измененные файлы:

> git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   arezzo.txt
#       modified:   arezzo.jsp
#
no changes added to commit (use "git add" and/or "git commit -a")

Что я делаю неправильно?

Ответ 1

Как говорится в сообщении:

изменений не было добавлено в commit (используйте "git добавить" и/или "git commit -a" )

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


Для вашего конкретного примера вы можете использовать:

git commit -am "save arezzo files"

(обратите внимание на добавочный a в флагах, также можно записать как git commit -a -m "message" - оба делают то же самое)

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

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


Еще одна вещь, о которой стоит знать, - это интерактивная постановка. Это позволяет добавлять части файла в промежуточную область, поэтому, если вы сделал три различных изменения кода (для связанных, но разных функций), вы можете использовать интерактивный режим для разделения изменений и добавления/фиксации каждой части по очереди. Возможны небольшие конкретные коммиты, подобные этому.

Ответ 2

Вы не добавили изменений. Либо добавьте их через

git add filename1 filename2

или добавить все изменения (из корневого пути проекта)

git add .

или используйте стенографию -a при совершении:

git commit -a -m "message".

Ответ 3

Вам следует:

git commit . -m "save arezzo files"

Ответ 4

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

Это немного глупо, но стоит проверить, что у вас нет папки .git в папке, которая не совершает.

Ответ 5

Вы могли бы сделать:

git add -u -n

Чтобы проверить, какие файлы были изменены и будут добавлены (сухой запуск: -n), а затем

git add -u

Чтобы добавить только что измененные файлы

Ответ 6

Возможно, очевидная вещь, но...

Если у вас есть проблемы с индексом, используйте git-gui. Вы получаете очень хорошее представление о том, как работает индекс (область постановки).

Другим источником информации, которая помогла мне понять этот индекс, был Скотт Чаконс "Получение Git" стр. 259 и вперед.

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

Я думаю, что git -gui и gitk на самом деле заставляют меня работать быстрее, и я избавился от вредных привычек вроде "git pull", например... Теперь я всегда выбираю сначала... Посмотрите, что новые изменения действительно до того, как я слился.

Ответ 7

Я нахожу эту проблему, когда я сделал git add . в подкаталоге ниже, где живет мой файл .gitignore (домашний каталог моего репозитория, так сказать). Попробуйте сменить каталоги в ваш самый верхний каталог и запустите git add ., а затем git commit -m "my commit message".

Ответ 8

Причина, по которой это происходит, заключается в том, что у вас есть папка, которая уже отслеживается Git внутри другой папки, которая также отслеживается Git. Например, у меня был проект, и я добавил в него подпапку. Оба они отслеживались Git, прежде чем я положил один в другой. Чтобы остановить отслеживание внутри, найдите его и удалите файл Git с помощью

rm -rf .git

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

Ответ 9

У меня была проблема, когда я делал commit --amend даже после выпуска git add ., и он все еще не работал. Оказывается, я сделал некоторые настройки .vimrc, и мой редактор работал неправильно. Исправление этих ошибок, чтобы vim вернул правильный код, разрешив проблему.