Почему "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
вернул правильный код, разрешив проблему.