Git фиксирует неустановленные изменения ранее подготовленного файла, в отличие от книги git-scm

Раздел книги:

http://git-scm.com/book/en/Git-Basics-Recording-Changes-to-the-Repository#Staging-Modified-Files

говорит, что если я изменю файл A, запущу «git add A», а затем снова изменю файл A, запущу «git commit» для этого файла, будут зафиксированы только ранее подготовленные изменения. Чтобы зафиксировать неустановленные изменения, снова добавьте файл, а затем зафиксируйте.

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

Кто-нибудь может пролить свет на этот вопрос? Спасибо.

РЕДАКТИРОВАТЬ: я не использую параметр -a Похоже, если я укажу файл явно для «git commit A» (я не использую параметр -a), он также фиксирует неустановленные изменения. При фиксации без файла «git commit» запрашивает ввод сообщения о фиксации, а затем ведет себя так, как описано в книге.


person alexy2k    schedule 31.08.2012    source источник
comment
Какие именно команды вы выполняете? Может быть, вы используете опцию -a?   -  person Piotr Praszmo    schedule 31.08.2012
comment
Похоже, что если я укажу файл явно для фиксации (я не использую параметр -a), он также зафиксирует неустановленные изменения.   -  person alexy2k    schedule 31.08.2012
comment
Будет ли git commit -- A делать то же самое? (зафиксировать неустановленные изменения)   -  person VonC    schedule 31.08.2012


Ответы (2)


Как вы определяете, что он «фиксирует все изменения файла A»? Я не могу воспроизвести это на моей версии git. Чтобы повторить то, что, я думаю, вы говорите, если вы будете следовать этому процессу:

$ git add A                 #initial commit of A
$ git commit -m first
$ <modify A>
$ git add A                 #stage first set of changes
$ <modify A again>
$ git commit -m second      #without staging second modifications

На этом этапе вы должны увидеть, что первый набор изменений, но не второй, был зафиксирован. git show HEAD:A должен отображать файл таким, каким он был до внесения вторых изменений. Однако вторые модификации все равно будут в вашей рабочей копии файла (cat A), а git status должен сообщить, что в A есть неустановленные изменения. Это именно то, что я получил, когда пытался воспроизвести это, и этого следовало ожидать.

Если это не то, что вы видите, то либо вы сделали что-то отличное от того, что было указано выше, либо каким-то образом используемая вами версия git не работает.

person twalberg    schedule 31.08.2012
comment
Правильно. Я вижу неустановленные изменения. Однако, если я отредактирую A, подготовлю его, снова отредактирую, а затем запущу «git commit A -m ‹..›», он также добавит неустановленные изменения. Подводя итог, явное указание файла во время фиксации отправляет все изменения - как поэтапные, так и нет. Имеет ли это смысл? Спасибо за помощь. - person alexy2k; 31.08.2012
comment
На справочной странице для git commit говорится следующее: Добавляемый контент можно указать несколькими способами: .... 3. перечислив файлы в качестве аргументов для команды фиксации, и в этом случае фиксация будет игнорировать изменения, внесенные в индекс, и вместо этого запишите текущее содержимое перечисленных файлов. Итак, да, когда вы явно называете файлы для фиксации, то, что вы видите, имеет смысл. - person twalberg; 01.09.2012
comment
Урок снова извлечен - сначала прочитайте документы :) Спасибо, что указали на это. Принятие вашего ответа. - person alexy2k; 01.09.2012

Вы, вероятно, добавляете опцию -a при фиксации, которая делает еще одно добавление ко всему перед фиксацией. Это работает, как описано, когда вы опускаете -a.

person Karl Bielefeldt    schedule 31.08.2012