Когда я должен использовать git add, до или после внесения изменений в файл? - PullRequest
3 голосов
/ 03 мая 2020

Потратьте несколько часов на поиски в Google, и в каждой статье авторы используют 'git add' до и после внесения изменений в файлы, что меня немного смущает.

Ответы [ 4 ]

3 голосов
/ 03 мая 2020

git add делает две вещи: он отслеживает неотслеживаемые файлы и вносит изменения в отслеживаемые файлы. Использование git add в неизмененном отслеживаемом файле ничего не даст.

3 голосов
/ 03 мая 2020

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

2 голосов
/ 03 мая 2020

Как правило, вы должны использовать его как раз перед git commit.

Вы можете использовать его в разное время, вам просто нужно знать, что он делает:

  • Git хранит фиксирует , а не файлы. (Но обязывает себя хранить файлы, так что все в порядке.)

  • Все внутри коммита доступно только для чтения, заморожено на все времена. Все живет вечно или, по крайней мере, до тех пор, пока живет сам коммит. Но ничего из этого нельзя изменить. Файлы в коммите имеют специальный Git -только формат: только Git может использовать эти файлы.

  • Это означает, что вы буквально не может работать с файлами commit . Вы должны работать над копией. Git извлекает зафиксированные файлы для вас, в рабочую область. Это ваше рабочее дерево или рабочее дерево . Все файлы, которые вы можете видеть и редактировать, являются копиями рабочего дерева. Их нет в хранилище! Они находятся только в вашей рабочей области, и вы можете делать все, что захотите.

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

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

Что git add делает, это манипулирует этой третьей копией. Третью копию следует рассматривать как между текущего коммита (заморожено, не может быть изменено) и версией рабочего дерева (обычный файл, вы можете его увидеть и отредактировать). Дополнительная промежуточная копия находится в том, что Git называет index или промежуточной областью . (Это два имени для одной и той же вещи.)

Что git add делает, это берет копию рабочего дерева и делает копию индекса индексной. По сути, он копирует копию рабочего дерева поверх индексной копии. Git называет это staging файлом для фиксации. Файл уже был там - уже в промежуточной области - просто это была старая версия, а не та, которую вы редактировали.

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

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

Помните, что если вы редактируете файл, вы, вероятно, захотите добавить его снова

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

  • одна в текущем коммите, которая заморожена;
  • другая один из ваших ранних git add; и
  • тот, который вы сейчас изменили в своем рабочем дереве.

Если вы git commit сейчас без использования git add, подтвержденная копия будет соответствовать промежуточной / индексной копии. Обычно это не то, что вы хотите, хотя иногда - это , что вы хотите; Вы можете использовать тот факт, что есть три версии с хорошим эффектом, иногда.

Помните, что git checkout записывает и индекс, и ваше рабочее дерево

Обратите внимание, что каждый git checkout, который выбирает какой-то новый коммит для просмотра или работы с / с, должен заполнять ваше рабочее дерево, чтобы вы могли видеть и работать с файлами. Но чтобы быть готовым к next commit, он также должен перезаписать индексные копии каждого файла. Вещи в индексе Git не зафиксированы, а вещи в вашем рабочем дереве даже не находятся в хранилище, поэтому ни один из них не может быть надежно заморожен на все времена.

Чтобы убедиться, что что-то действительно благополучно спасён, сделай коммит! Вы можете делать временные коммиты на временных ветках, перетасовывать их и, в конце концов, выбрасывать временные коммиты. (Они заморожены, и от них немного сложно избавиться полностью, но обычно лучше иметь дополнительные коммиты, которые вам не нужны, чем не делать коммит, в котором вы в конечном итоге нуждаетесь.)

0 голосов
/ 03 мая 2020

git фиксирует ваш индекс, а не рабочий каталог. Если вы изменили несколько файлов и хотите зафиксировать только один из них, вы можете git добавить и затем зафиксировать, и только файлы, «добавленные» в индекс, будут зафиксированы.

Узнайте, что такое рабочий каталог, что такое index, что такое sta sh, что такое репозиторий и удаленный репозиторий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...