Отмените удалить действие в Подвижном

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

41
задан Kostas 1 February 2010 в 09:49
поделиться

3 ответа

Существует два варианта с использованием HG Revert :

HG Revert -a

, который вернется к предыдущему пересмотре и помещает все изменения в новые файлы с помощью .orig, добавленные к именам

HG Revert [Имена файлов для неправомерных], чтобы просто вернуть эти файлы

, я бы, вероятно, пошел с последним

23
ответ дан 27 November 2019 в 00:25
поделиться

HG Revert

Я почти уверен, что Mercurial даже делает резервные копии ваших изменений по умолчанию.

16
ответ дан 27 November 2019 в 00:25
поделиться

Видимо, можно скинуть ноль, но это все равно где-то превращено в исключение.

Попытка создания объекта null приводит к (полностью не связанному) исключению Null Reference.

Вопрос о том, почему разрешено выдавать null , - это вопрос о том, почему это разрешено:

object o = null;
o.ToString();
-121--849250-

Потому что спецификация языка ожидает выражение типа System.Exception (поэтому null является допустимым в этом контексте) и не ограничивает это выражение значением, отличным от null. В общем, нет пути, что он мог бы обнаружить, является ли значение этого выражения null или нет. Среда выполнения в любом случае должна иметь дело с null . Смотрите:

Exception ex = null;
if (conditionThatDependsOnSomeInput) 
    ex = new Exception();
throw ex; 

Они могли бы, конечно, сделать конкретный случай метания null литерала недействительным, но это не очень помогло бы, так почему бы не тратить пространство спецификации и уменьшить согласованность для небольшой выгоды?

Отказ от ответственности (прежде чем я получил пощечину от Эрика Липперта): Это мои собственные предположения о рассуждениях, лежащих в основе этого проектного решения. Конечно, я не был на совещании конструкторов;)


Ответ на ваш второй вопрос, может ли переменная выражения, обнаруженная в предложении catch, быть пустой: Хотя в спецификации C # ничего не говорится о том, могут ли другие языки вызывать распространение исключения null , она определяет способ распространения исключений:

Предложения catch, если таковые имеются, проверяются в порядке появления, чтобы найти подходящий обработчик для исключения. Первое предложение catch , указывающее тип исключения или базовый тип типа исключения , считается совпадающим. Общее предложение catch считается совпадающим для любого типа исключения. [...]

Для null оператор bold имеет значение false. Таким образом, хотя чисто основываясь на том, что говорит спецификация C #, мы не можем сказать, что базовая среда выполнения никогда не будет выбрасывать NULL, мы можем быть уверены, что даже если это так, она будет обрабатываться только общим предложением catch {} .

Для реализаций C # в CLI можно обратиться к спецификации ECMA 335. В этом документе определяются все исключения, создаваемые внутри интерфейса командной строки (ни одно из них не имеет значения null ), и упоминается, что определяемые пользователем объекты исключений вызываются командой throw . Описание этой инструкции практически идентично инструкции C # throw (за исключением того, что она не ограничивает тип объекта System.Exception ):

Описание:

Инструкция throw передает объект исключения (тип O ) в стек и очищает стек. Для получения подробной информации о механизме исключений см. Раздел I.
[Примечание: Хотя CLI разрешает передачу любого объекта, CLS описывает определенный класс исключений, который должен использоваться для языковой совместимости.end note]

Если obj имеет значение null , возникают исключения:

System.StartReferureException .

Правильность:

Правильный CIL гарантирует, что объект всегда будет иметь значение null или ссылку на объект (т.е. тип O ).

Я считаю, что их достаточно для того, чтобы сделать вывод о том, что изъятые исключения никогда не являются пустыми .

-121--849249-

После вашего комментария к jk я проверил hg забыть . Кажется, это просто ярлык для hg remove -Af , что означает, что это реальная противоположность hg add .

После этого, если вы использовали hg remove -Af , то вы сможете вернуть это с помощью hg add (я только что попробовал это и, кажется, работает).

3
ответ дан 27 November 2019 в 00:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: