Для возвращения изменений только в одном файле в фиксации, как VonC, на который указывают, я был бы checkout
ответвление (ведущее устройство или соединительная линия или безотносительно) и затем checkout
версия файла, я хотел вернуться и рассматривать его как новую фиксацию:
$ git checkout trunk
$ git checkout 4f4k2a^ a.py
$ git add a.py
$ git diff #verify I'm only changing what I want; edit as needed
$ git commit -m 'recover function deleted from a.py in 4f4k2a'
существует, вероятно, команда инфраструктуры, которая сделала бы это непосредственно, но я не использовал бы ее, если бы я знал это. Не то, чтобы я не доверяю Мерзавцу, но я не доверяю мне - я не положил бы, что знал, не смотря, что было изменено в том файле в той фиксации и с тех пор. И как только я смотрю, легче просто создать новую фиксацию путем редактирования diff
. Возможно, это - просто персональный workstyle.
В C # всегда разрешалось неявное преобразование литерала 0 в любое значение Enum. Изменилось то, как правило применяется к другим постоянным выражениям. Он был сделан более согласованным и позволял неявно преобразовывать любые константные выражения, имеющие значение 0, в перечисление.
Приведенный вами пример дает одинаковое поведение во всех версиях C #.
Вот пример измененного поведения (непосредственно из связанной документации )
public enum E
{
Zero = 0,
One = 1,
}
class A
{
public static A(string s, object o)
{ System.Console.WriteLine("{0} => A(object)", s); }
public static A(string s, E e)
{ System.Console.WriteLine("{0} => A(Enum E)", s); }
static void Main()
{
A a1 = new A("0", 0);
A a3 = new A("(int) E.Zero", (int) E.Zero);
}
}
Вывод Visual C # 2005:
0 => A (Enum E) (int) E.Zero => A (объект)
Вывод Visual C # 2008:
0 => A (Enum E) (int) E.Zero => A (Enum E)
Я предполагаю, что это потому, что 0 считается" значением по умолчанию "перечислений.
C # (ключевое слово default было введено в C # 2.0 )
enum DbType {
Unspecified,
SqlServer
}
DbType t;
int i = 0;
Console.WriteLine(t == i);
Console.WriteLine(i == default(DbType));
Вывод:
True
True
Это разрешено, начиная с версии 1.0. Это значение по умолчанию для перечисления.
"Литерал 0 неявно преобразуется к любому типу перечисления. В Visual C # 2005 и более ранние версии компилятора, есть также некоторые постоянные выражения, которые оцениваются как 0, что может неявно преобразовать в любое перечисление тип, но правило, определяющее какое из этих выражений кабриолет непонятно. В Visual C # 2008, все постоянные выражения, которые равны 0 могут быть неявно преобразован в любой тип перечисления. "
Как уже упоминалось, 0 - это перечисление по умолчанию. Попытайтесь представить себе перечисления следующим образом (более явным образом):
public enum HairColor
{
Blonde = 0x0000;
Brunett = 0x0001;
Red = 0x0002;
StrawberryBlonde = 0x0004;
}
Поскольку вы не указываете явно свои значения данного перечисления, C # автоматически присвоит ему значение по умолчанию. Если вы этого не хотите, вам придется явно определить значения для данного перечисления.
«Базовым типом элементов перечисления по умолчанию является int. По умолчанию первый перечислитель имеет значение 0, а значение каждого последующего перечислителя увеличивается на 1.» - Это из примечаний MSDN для инфраструктуры 1.1 , так что так было всегда.