Чому "git commit" не зберігає мої зміни?


251

Я зробив 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")

Що я роблю неправильно?


16
Використовуйте git commit -am "save arezzo files"для автоматичного додавання всіх змін (wrt .gitignore). Ви можете додати лише конкретні файли / dirs:git add file.src
mbx

Відповіді:


400

Як йдеться у повідомленні:

не додано змін до фіксації (використовувати "git add" та / або "git commit -a")

У Git є "область постановки", куди потрібно додати файли, перш ніж робити їх, ви можете прочитати їх пояснення тут .


Для конкретного прикладу ви можете використовувати:

git commit -am "save arezzo files"

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

Крім того, якщо ви хочете бути більш вибірковими щодо того, що ви додаєте до комісії, ви використовуєте команду git add, щоб додати відповідні файли до області постановки, а статус git - для попереднього перегляду того, що збирається додати (пам'ятаючи звернути увагу на формулювання, що використовується).

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


Ще одна річ, про яку варто знати - це інтерактивна постановка - це дозволяє додавати частини файлу до області постановки, тому якщо ви внесли три чіткі зміни коду (для пов’язаних, але різних функціональних можливостей), ви можете використовувати інтерактивний режим для розділення розбиття змінювати та додавати / виконувати кожну частину по черзі. Малі менші конкретні зобов’язання, як це, може бути корисним.


@PeterBoughton Ви мали на увазі "інтерактивне додавання" замість "взаємодія додавання"?
djb

3
Ні, я мав на увазі інтерактивне додавання.
Пітер Бауфтон

2
Локальне сховище - це певна область розміщення, перш ніж надсилати код у віддалене сховище. Навіщо додати ще один "шар" перед внесенням змін, це не трохи ускладнено? Я новачок у git, але я думаю, що 99,99% розробників завжди використовують набір -am, оскільки зміни так чи інакше не виходять за рамки їх локального середовища.
PawelRoman

2
Я думаю, що я просто натрапив на це, тому що я звик, щоб моя IDE піклувалася про це за мене. Не впевнений, чому це теж необхідний крок, але знову ж таки, багато про git я не отримую ... я маю на увазі git ...
trpt4him

49

Ви не додали зміни. Або спеціально додайте їх через

git add filename1 filename2

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

git add .

або скористайтеся скороченням -a, виконуючи посилання:

git commit -a -m "message".

Крім того, я настійно закликаю користувачів використовувати інтерактивне додавання. Особливо, коли ви намагаєтесь зробити приємні невеликі комітети, які легко повертаються.
jer

40

Ви повинні зробити:

git commit . -m "save arezzo files"

4
Це здається правильною відповіддю на питання ОП. Він не хотів "додавати", він хотів здійснити те, що було змінено.
VectorVortec

8

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

Це трохи нерозумно, але варто перевірити, чи немає у вас папки .git під папкою, яка не виконує.


7

Ви могли зробити:

git add -u -n

Щоб перевірити, які файли ви змінили і які будуть додані (параметр «сухий запуск: -n»), а потім

git add -u

Щоб додати лише змінені файли


4

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


4

Можливо, очевидна річ, але ...

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

Іншим джерелом інформації, яка допомогла мені зрозуміти індекс, був Скотт Чаконс "Отримання Git" сторінка 259 і вперед.

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

Я думаю, що git-gui та gitk насправді змушують мене працювати швидше, і я позбувся шкідливих звичок, таких як "git pull", наприклад ... Тепер я завжди спочатку отримую ... Подивіться, які нові зміни насправді є перед тим, як злитися.


3

Причина, чому це відбувається, полягає в тому, що у вас є папка, яку Git вже відстежує в іншій папці, яку також відстежує Git. Наприклад, у мене був проект, і я додав до нього підпапку. Їх обох відстежував Гіт, перш ніж я поклав одного всередину іншого. Щоб перестати відслідковувати всередині, знайдіть його та видаліть файл Git за допомогою:

rm -rf .git

У моєму випадку у мене була програма WordPress, і папка, яку я додала всередині, була темою. Тому мені довелося перейти до кореня теми та видалити файл Git, щоб тепер весь проект відслідковувався батьком, додатком WordPress.


1

якщо у мене є більше файлів у моєму випадку, у мене є 7000 файлів зображень, коли я намагаюся додати їх із папки маршруту проекту, він не додав їх, але коли я переходжу до папки зображень, все нормально. Пройдіть цільову папку та командуйте як abows

git add .
git commit -am "image uploading"
git push origin master

git push origin master Перерахування об'єктів: 6574, зроблено. Підрахунок об’єктів: 100% (6574/6574), виконано. Дельта стиснення з використанням до 4 ниток Стиснення об'єктів: 100% (6347/6347), виконано. Написання об’єктів: 28% (1850/6569), 142,17 МіБ | 414,00 Кб / с


0

У мене виникла проблема, з якою я займався commit --amendнавіть після видачі, git add .і вона все ще не працювала. Виявляється, я зробив декілька .vimrcналаштувань, і мій редактор працював неправильно. Виправлення цих помилок таким чином, щоб vimповернути правильний код вирішив проблему.


0

У мене була дуже схожа проблема з тим же повідомленням про помилку. "Зміни не поетапно виконуються", але коли я роблю різницю, це показує відмінності. Нарешті я зрозумів, що деякий час я змінив справу каталогів. колишній "PostgeSQL" до "postgresql". Як я пам’ятаю зараз, інколи git залишить файл або два позаду у старому каталозі справ. Тоді ви зробите нову версію до нової справи.

Таким чином, git не знає, на кого можна покластися. Щоб вирішити це, мені довелося зайти на веб-сайт github. Тоді ви зможете переглянути обидва випадки. І ви повинні видалити всі файли з неправильно кесованого каталогу. Будьте впевнені, що у вас збережена правильна версія або в правильному каталозі.

Після того, як ви видалили всі файли зі старого каталогу справ, весь цей каталог зникне. Тоді зробіть зобов’язання.

У цей момент ви повинні мати змогу здійснити Pull на своєму локальному комп’ютері і більше не бачити конфліктів. Таким чином, зможете знову взяти на себе зобов’язання. :)


0

якщо у вас є підпапка, яку було клоновано з іншого git-Repository, спершу потрібно видалити $ .git $ файл з дочірнього сховища: rm -rf .git після цього ви можете перейти до батьківської папки та використовувати git add -A.

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