Почему "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")

что я делаю не так?

9 ответов


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

никаких изменений для фиксации (используйте" git add "и/или"git commit-a")

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


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

git commit -am "save arezzo files"

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

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

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


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


вы не добавили изменения. Либо специально добавьте их через

git add filename1 filename2

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

git add .

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

git commit -a -m "message".

вы должны:

git commit . -m "save arezzo files"

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

git add -u -n

чтобы проверить, какие файлы вы изменили и собираетесь добавить (опция dry run: - n), а затем

git add -u

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


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

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


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


может быть, очевидная вещь, но...

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

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

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

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


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

rm -rf .git

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


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