SmartGit не показывает незафиксированные изменения в журнале - PullRequest
0 голосов
/ 01 июля 2018

У меня проблема с моим клиентом SmartGit (но, возможно, это связано с Git).

У меня есть некоторые незафиксированные изменения, поэтому я предполагаю, что это будет показано как первая строка на графике (представление журнала), но это не так. Как мне вернуть его обратно?

Этот скриншот показывает, что я ищу:

enter image description here

Кроме того, я работаю полностью локально, поэтому у меня нет удаленного хранилища (не уверен, что это имеет какое-то значение).

При запуске команды git log --all --decorate --oneline --graph в оболочке Bash я также не получаю строку Незаполненные изменения . Какие цифры?

1 Ответ

0 голосов
/ 01 июля 2018

На самом деле это просто ответ на последнюю часть вашего вопроса, но с помощью git log --all --decorate --oneline --graph. Вы задаетесь вопросом, почему вы не видите узел фиксации для незафиксированных изменений.

gitk (графический интерфейс, который поставляется с Git) показывает такой узел; git log --graph нет. Каждый зритель должен решить, притворяться ли незафиксированные изменения узлом фиксации, который можно показать, или это просто незафиксированные изменения и, следовательно, не узел.

Последнее является более точным с технической точки зрения: незафиксированные изменения не коммит! Однако отображение их в графическом интерфейсе может быть более удобным для пользователя. Так что решать, показывать ли их, зависит от графического интерфейса.

Обратите внимание, что с точки зрения Git, на самом деле три версии каждого файла доступны для вас всегда. 1 Если у вас есть файл с именем README.md, для Например, у вас есть три README.md файла:

  • Один README.md сохраняется в текущем (HEAD) коммите, доступен только для чтения. Эту копию нельзя изменить! Он хранится в специальной, только для Git, сжатой форме. Поскольку он сохраняется в коммите, он сохраняется на все время или, по крайней мере, до тех пор, пока коммит продолжает существовать.

    Если вы испортили две другие версии README.md, вы можете восстановить версию HEAD, используя git checkout HEAD README.md в командной строке. Это перезаписывает обе другие две копии.

  • Второй README.md, который войдет в следующий коммит, находится там, для чтения / записи, хранится в чрезвычайно важной, но обычно почти полностью невидимой (!) Сущности. У Git есть три разных имени для этой вещи: он называется index , или staging-area , или cache , в зависимости от того, кто выполняет вызов. Все ваши текущие файлы находятся в индексе, также в специальном формате Git-only, но здесь, в индексе, вы можете изменить их.

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

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

  • Наконец, есть файл README.md, который вы действительно можете открыть в редакторе, просмотреть с помощью средства просмотра файлов и т. Д. Этот файл находится в вашем рабочем дереве . Это в обычном формате, не Git, так что вы можете работать с ним.

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

Обратите внимание, что git status выполняет два git diff с: первый сравнивает фиксацию HEAD с индексом. Что бы здесь ни отличалось, готовится к коммиту . Вторая git diff сравнивает индекс с рабочим деревом. Что бы здесь ни отличалось, это , не предназначенное для коммита .

Когда графический просмотрщик, такой как gitk, показывает вам узел для незафиксированных изменений, он либо объединяет индекс и рабочее дерево, либо игнорирует один из этих двух. В любом случае, то, что он показывает, не является правдой! Тем не менее, знание того, что у вас do есть незафиксированные изменения, является ценным, независимо от того, являются ли эти файлы промежуточными, неустановленными или и тем, и другим (например, может быть README.md является промежуточным, а какой-то другой файл - нетегированным). Приятно иметь способ показать это.


1 Это преувеличение и занижение. Поскольку вы можете создавать новые файлы или удалять существующие, иногда у индекса и / или рабочего дерева есть версии, которых нет в HEAD, или наоборот. Вот где это преувеличение: может быть только одна или две версии какого-либо файла. В то же время вы можете извлечь любую подтвержденную версию любой файл в в любое время , так что это занижение, но версия HEAD особенно важно то, что git status будет использовать при сравнении с индексом. Наконец, есть еще один особый случай при работе с объединением, которое имеет конфликты: в этом случае сам индекс содержит (до) трех версий конфликтующих файлов, так что вы получаете еще больше одновременно доступных версий каждого файла. .

...