Що означає "Зміни, не встановлені для здійснення"


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, git скаже меніChanges not staged for commit

якщо я git aтоді файл aбуде вstaged status

якщо я змінив file aзараз, буде два статуси file aвgit , правда?

Тож я маю вирішити, чи зробити так, щоб staged aзробити поступку чи зробити так, not stage aщоб попередній етап file aбув відкинутий?

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


3
якщо ви отримаєте це повідомлення, і чи хочете ви, щоб цей файл (а) потрібно було встановити, переконайтеся, що ви знаходитесь у правильному шляху до каталогу (кореневий шлях проекту для додавання всіх), поки ви git add
Sadee

Відповіді:


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, і проблема пішла.
elia

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
@Hashim Я згоден, я дійсно не розумію логіку.
Зубний Герман

6

Виконайте наведені нижче дії:

1- git stash
2- git add.
3- git commit -m "ваше повідомлення про виконання"


5
git stash видалив усі мої зміни, там було 10 годин роботи :(
viniciussvl

13
якщо ви використовували "git stash", вони поміняють ці зміни в "тимчасове місце", щоб повернути їх, просто введіть "git stash pop", щоб отримати зміни від "temp place"
Сайрус Зей

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

І на них це з’явиться "Будь ласка, введіть повідомлення про фіксацію змін."

  • Ви побачите це повідомлення, якщо ви почнете виконувати без повідомлення (-м)
  • Вийти з нього можна двома кроками:
  • 1.а. Введіть багаторядкове повідомлення, щоб рухатись вперед з комітом.
  • 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, коли мені не вдалося видалити файл із мого локального сховища та здійснити фіксацію з локального сховища до віддаленої гілки master.
Siwoku Adeola

1

це означає, що вони не додаються до вчинення, вам доведеться робити git додавання скриптів / excel_parser.py та лайків для постановки їх .. після того, як вони будуть інсценовані, коли ви отримаєте статус git, вони будуть інсценовані, а git počinшить їх

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


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) git add. 2) git commit -m "ваше повідомлення" 3) master git push origin

Я сподіваюся, що це вам допоможе.



-7

Видалити dir/.../.git

працює для мене.


Ваша відповідь потребує довідкової інформації або розуміння того, чому або як вона працювала для вас.
Джошуа К

Відповідно, відповідь не підтримує питання. Просимо змінити або додати додаткову інформацію.
Франциско Марія Калісто
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.