Что означает «Изменения, не подготовленные для фиксации»

239

Я думал, что если вы хотите отслеживать файлы, вы должны git add [files you want to track]

Я не знаю, почему я получил сообщения Changes not staged for commit.

Если эти файлы не были размещены, не должен gitпоказывать мне, что эти файлы были Untrackedтакими

введите описание изображения здесь

Все, что я сделал, это создал новую функцию из developветки и работал в feature/change_excel_formatветке

Я думал, что эти файлы должны быть в stagedстатусе,

Но git statusсказал мнеChanges not staged for commit

введите описание изображения здесь

Для того, чтобы Короче говоря, я только знаю , что есть 3 этапа в мерзавца untracked, staged, committed Может ли один скажите мне, что был этап , дляChanges not staged for commit введите описание изображения здесь

Так что, если я изменил файл a (уже в репо)

и типа git st, мерзавец скажет мнеChanges not staged for commit

если я git aтогда файл aбудет вstaged status

если я модифицировал file aтеперь будет два статуса file aв git, не так ли?

Так что я должен решить, сделать staged aли коммит или сделать not stage aинсценировку, и тогда предыдущая инсценировка file aбудет отброшена?

введите описание изображения здесь

newBike
источник
3
если вы получили это сообщение и хотите, чтобы этот файл (a) был зафиксирован, убедитесь, что вы находитесь в правильном пути к каталогу (корневой каталог проекта для добавления всех), пока вы
выполняете команду

Ответы:

325

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

Это позволяет вам зафиксировать только подмножество изменений, которые вы сделали со времени последней фиксации. Например, допустим, у вас есть файл a, файл bи файл c. Вы изменяете файл aи файл, bно изменения очень различны по своей природе, и вы не хотите, чтобы все они были в одном коммите. Вы выпускаете

git add a
git commit a -m "bugfix, in a"
git add b
git commit b -m "new feature, in b"

Как примечание, если вы хотите зафиксировать все, вы можете просто набрать

git commit -a

Надеюсь, поможет.

Стефано Фаласка
источник
1
Итак, если эти файлы уже в репо. и я их изменил, я тоже могу git commit THEMнапрямую, без добавления их, верно?
newBike
1
конечно. И в этом случае будут зафиксированы только перечисленные файлы, независимо от наличия поэтапных изменений в разных файлах.
Стефано Фаласка
1
У меня та же проблема, но моя проблема была также в субмодульной причине неотслеживаемых файлов. Поэтому в моем подкаталоге я также добавляю все изменения с помощью git, и проблема исчезла.
Элия
1
Я уже сделал, git clean -fdи я все еще получаю это. Я хочу избавиться от всех изменений. Что еще я должен делать?
Мед
3
git commit -aне передает все, только обновленные файлы, а не новые ...
Мартин,
62

Вы должны использовать git add для их установки, иначе они не будут коммититься. Предположим, он сообщает git, какие изменения вы хотите зафиксировать.

git add -u :/добавляет все измененные изменения файла на сцену git add * :/добавляет измененные и любые новые файлы (это не gitignore'ed) на сцену

Дэнни
источник
2
Этот ответ ясен и лаконичен по сравнению с приведенным выше, поэтому я люблю его. ;)
Оахакаматт
13

Это еще один способ сказать вам Git:

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

Изменения в файлах не выполняются, если вы не указали git addих явно (и это имеет смысл).

Поэтому, когда вы git commit, эти изменения не будут добавлены, так как они не организованы. Если вы хотите зафиксировать их, вы должны сначала поставить их (т.е. git add).

Агис
источник
2
Но я не изменил файл, на который он ссылается
Eoin
1
Я не понимаю, как именно это поведение имеет смысл. Если я уже сказал Git отслеживать файл, add .когда я настраивал хранилище, и он может обнаружить, что я внес в него изменения, почему мне нужно явно добавлять файлы каждый раз, когда я фиксирую? Просто чтобы внести изменения в файл, я должен add, commit и push . Разграничение между commitи толчком имеет смысл для меня, разграничение между addи commitкажется до смешного излишним.
Прометей
1
@ Хашим Я согласен, я действительно не понимаю логику.
Герман Тутрот
6

Следуйте инструкциям ниже:

1- мерзавец
2- мерзавец добавить.
3- git commit -m "ваше сообщение коммита"

Мамы-х
источник
5
git stash удалил все мои изменения, там было 10 часов работы :(
viniciussvl
13
если вы использовали «git stash», то поместите эти изменения в «временное место», чтобы вернуть их, просто наберите «git stash pop», чтобы получить ваше изменение из «временного места»
Cyrus Zei
12
НЕ ИСПОЛЬЗУЙТЕ git stash, пока не прочитаете комментарии @viniciussvl и Cyrus
потрепанный
1
Зачем мне в этом случае использовать git stash?
Тобиас Кауфманн
4

Предполагается, что вы сохранили новый файл изменений. (например, navbar.component.html)

Бегать:

ng status
modified:   src/app/components/shared/navbar/navbar.component.html

Если вы хотите загрузить эти изменения для этого файла, вы должны выполнить:

git add src/app/components/shared/navbar/navbar.component.html

А потом:

git commit src/app/components/shared/navbar/navbar.component.html -m "new navbar changes and fixes"

А потом:

git push origin [your branch name, usually "master"]

-------------------------------------------------- -------------

Или, если вы хотите загрузить все свои изменения (несколько / все файлы):

git commit -a

И на них это появится: «Пожалуйста, введите сообщение для ваших изменений».

  • Вы увидите это сообщение, если сделаете коммит без сообщения (-m)
  • Вы можете выйти из него двумя шагами:
  • 1.a. Введите многострочное сообщение, чтобы перейти вперед с фиксацией.
  • 1.b. Оставьте пустым, чтобы прервать коммит.
    1. Нажмите «esc», затем введите «: wq» и нажмите «Enter», чтобы сохранить ваш выбор. Виола!

А потом:

git push

И альт!

Дэвид Кастро
источник
2
То же самое я сказал выше: git commit -aне загружает все изменения, он не включает новые файлы. Это только передаст обновления к существующим файлам.
Мартин
3

Попробуйте следовать Int Git Bash

1.git add -u :/

2.git commit -m "your commit message"

  1. git push -u origin master

Примечание: если вы не инициализировали репо.

Прежде всего

git init 

и выполните вышеупомянутые шаги по порядку. Это сработало для меня

Амила Вирасингхе
источник
Эта проблема сработала для меня в конфликте git, когда я не смог удалить файл из моего локального репозитория и зафиксировать его из локального репозитория в удаленной главной ветке.
Сивоку Адеола
1

это означает, что они не были добавлены для фиксации, вам нужно будет выполнить git add scripts / excel_parser.py и лайки для их постановки. Как только они будут размещены, когда вы сделаете состояние git, они будут размещены, и git commit будет их фиксировать.

вы можете выполнить git commit -a -m "all checkin", который автоматически установит и зафиксирует все файлы в дереве

LeMoN.xaH
источник
1

Эта ошибка может появиться, когда вы добавили новый файл в свой код, и теперь вы пытаетесь зафиксировать код, не ставя его (добавляя).

Чтобы преодолеть это, вы можете сначала добавить файл с помощью git add ( git add your_file_name.py), а затем зафиксировать изменения ( git commit -m "Rename Files" -m "Sample script to rename files as you like")

Вакас Халид Обейди
источник
1

Я прочитал все вышеупомянутые ответы и попробовал в терминале следующие шаги, которые прекрасно работают для обновления новых и изменения файлов на master.

1) мерзавец добавить. 2) git commit -m "ваше сообщение" 3) git push origin master

Я надеюсь, это поможет вам.

Ксароз Шреста
источник
1

Вы можете быть не в том каталоге, когда делаете git add. :-)

ослепление
источник
-7

удалять dir/.../.git

работает для меня.

стек аджи
источник
Ваш ответ нуждается в дополнительной информации или в понимании того, почему или как он работает для вас.
Джошуа К
Так как ответ не поддерживает вопрос. Пожалуйста, рассмотрите возможность изменить или добавить дополнительную информацию.
Франциско Мария Калисто