Статьи

Git - Как отменить 'git добавить' перед фиксацией? - Qaru

Опубликовано: 22.08.2018

В дополнение к принятому ответу, если ваш ошибочно добавленный файл был огромным, вы, вероятно, заметите, что даже после его удаления из индекса с помощью "git reset" он все еще занимает место в .git каталог. Это не о чем беспокоиться, файл действительно находится в репозитории, но только как "свободный объект", он не будет скопирован в другие репозитории (через clone, push), и пространство будет в конечном итоге возвращено - хотя возможно, не очень скоро. Если вы беспокоитесь, вы можете запустить:

git gc --prune=now

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

Итак, что представляет собой реальный отменить из git add?

git reset HEAD <file>?

или

git rm --cached <file>?

Строго говоря, и если я не ошибаюсь: none .

git add нельзя отменить - в целом.

Напомним сначала, что действительно делает git add <file>:

Если <file> был ранее не отслеживался , git add добавляет его в кеш с его текущим контентом.

Если <file> уже отслеживался , git add сохраняет текущий контент (моментальный снимок, версия) в кеш. В GIT это действие по-прежнему называется добавить , (а не просто обновлять его), поскольку две разные версии (моментальные снимки) файла рассматриваются как два разных элемента: следовательно, мы действительно добавляем новый элемент в кэш, который в конечном итоге будет выполнен позже.

В свете этого вопрос немного неоднозначен:

Я ошибочно добавил файлы с помощью команды...

Сценарий OP, по-видимому, является первым (необработанным файлом), мы хотим, чтобы "undo" удалял файл (а не только текущее содержимое) из отслеживаемых элементов. Если это , то это нормально для запуска git rm --cached <file>.

И мы могли бы также запустить git reset HEAD <file>. Это в целом предпочтительнее, поскольку оно работает в обоих сценариях: оно также отменяет, когда мы ошибочно добавили версию уже отслеживаемого элемента.

Но есть два оговорки.

Во-первых: Есть (как указано в ответе) только один сценарий, в котором git reset HEAD не работает, но git rm --cached делает: новый репозиторий (без коммитов). Но, действительно, это практически нерелевантный случай.

Во-вторых: имейте в виду, что git reset HEAD не может восстановить магическое восстановление ранее сохраненного содержимого файла, оно просто переиздает его из HEAD. Если наш ошибочный git add перезаписал предыдущую выпущенную незафиксированную версию, мы не сможем ее восстановить. Вот почему, строго говоря, мы не можем отменить.

Пример:

$ git init $ echo "version 1" > file.txt $ git add file.txt # first add of file.txt $ git commit -m 'first commit' $ echo "version 2" > file.txt $ git add file.txt # stage (don't commit) "version 2" of file.txt $ git diff --cached file.txt -version 1 +version 2 $ echo "version 3" > file.txt $ git diff file.txt -version 2 +version 3 $ git add file.txt # oops we didn't mean this $ git reset HEAD file.txt # undo ? $ git diff --cached file.txt # no dif, of course. stage == HEAD $ git diff file.txt # we have lost irrevocably "version 2" -version 1 +version 3

Конечно, это не очень важно, если мы просто следуем обычному ленивому рабочему процессу "git add" только для добавления новых файлов (случай 1), и мы обновляем новое содержимое с помощью команды commit, git commit -a,

Новости

Специальные объективы на смартфон

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

Где недорого купить брендовые часы
Несмотря на то, что практически все наши современники пользуются разнообразными электронными мобильными устройствами, в которые встроены хронометры, мода на наручные часы возвращается. При этом, современный

Чемодан на колесах на bagboom
Ни для кого не секрет, что в наше время человек очень и очень мобилен. Мы передвигаемся по разным городам, по разным странам и так далее. Мы путешествуем, мы ездим по делам. И здесь стоит отметить, что

Комплект постельного белья
Комплект постельного белья — это универсальная вещь, которая подойдет в качестве подарка практически на любой праздник. Его никогда не бывает много — в каждом доме обязательно должно быть

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

Пигменты для перманентного макияжа и татуажа
Несмотря на то, что перманентный макияж уже не новинка, и сказано о нем уже было немало, но интерес к нему прекрасной половины человечества не угасает. Мы расскажем о нем более подробно, чтобы развеять

Составники для одежды от СВ-ПРИНТ
Наш мир стремительно меняется и предоставляет все новые и новые, еще более привлекательные возможности, открывая невиданные до селе перспективы и бесконечно широко раздвигая горизонты. Но, в тоже время,

Купить страховку онлайн
Серия и номер водительского удостоверения пишутся слитно, пробелы недопустимы. Заполняем дополнительные данные о транспортном средстве. На данном этапе потребуется ввести в систему следующие данные:

Інтернет магазин Речі для малечі
Вибір доменного імені для сайта інтернет-магазину – одне з найбільш важливих рішень на етапі становлення цього бізнесу. Цілком логічно, що в майбутньому для покупців воно стане асоціюватися із вашим

По ссылке
От выбранной профессии будет напрямую зависеть Ваше будущее, будущее Вашей семьи и её достаток в материальном плане. Кроме того, правильно выбранная профессия будет приносить моральное удовольствие, которое

rss