Как я фиксирую проверку HEAD^ в мерзавце

Мне было любопытно где StringBuilder, выдержанный с этими тестами. Результаты ниже...

class Program {
   static void Main(string[] args) {

      var p = new { FirstName = "Bill", LastName = "Gates" };

      var tests = new[] {
         new { Name = "Concat", Action = new Action(delegate() { string x = p.FirstName + " " + p.LastName; }) },
         new { Name = "Format", Action = new Action(delegate() { string x = string.Format("{0} {1}", p.FirstName, p.LastName); }) },
         new { Name = "StringBuilder", Action = new Action(delegate() {
            StringBuilder sb = new StringBuilder();
            sb.Append(p.FirstName);
            sb.Append(" ");
            sb.Append(p.LastName);
            string x = sb.ToString();
         }) }
      };

      var Watch = new Stopwatch();
      foreach (var t in tests) {
         for (int i = 0; i < 5; i++) {
            Watch.Reset();
            long Elapsed = ElapsedTicks(t.Action, Watch, 10000);
            Console.WriteLine(string.Format("{0}: {1} ticks", t.Name, Elapsed.ToString()));
         }
      }
   }

   public static long ElapsedTicks(Action ActionDelg, Stopwatch Watch, int Iterations) {
      Watch.Start();
      for (int i = 0; i < Iterations; i++) {
         ActionDelg();
      }
      Watch.Stop();
      return Watch.ElapsedTicks / Iterations;
   }
}

Результаты:

Concat: 406 ticks
Concat: 356 ticks
Concat: 411 ticks
Concat: 299 ticks
Concat: 266 ticks
Format: 5269 ticks
Format: 954 ticks
Format: 1004 ticks
Format: 984 ticks
Format: 974 ticks
StringBuilder: 629 ticks
StringBuilder: 484 ticks
StringBuilder: 482 ticks
StringBuilder: 508 ticks
StringBuilder: 504 ticks
11
задан Ryan Kearney 10 November 2009 в 05:06
поделиться

3 ответа

Теперь, когда я делаю коммиты в свой проект, он показывает SHA-1 в командной строке как рабочую ветвь (вместо главной)

Это, вероятно, означает, что у вас есть «отдельный ГОЛОВА". Отсоединенный HEAD указывает непосредственно на фиксацию, а не на ветку (которая затем указывает на фиксацию). Отсоединенная голова похожа на безымянную ветку.

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

Как я могу указать HEAD на последнюю фиксацию, над которой я работаю?

HEAD - это всегда фиксация, с которой вы работаете, независимо от того, отключена она или нет.

Если вы имеете в виду «Как могу ли я указать master на последний коммит, с которым я работаю? », тогда это то же самое, что спросить« Как я могу заставить master указывать на HEAD ]? ». Ответ -

git branch -f master HEAD

(на самом деле, вы можете не указывать HEAD , поскольку это значение по умолчанию). Это принудительно сбрасывает мастер на фиксацию, текущую в HEAD . Любые коммиты на master , которые недоступны через другую ветку или текущую HEAD , отныне будут доступны только через reflog и в конечном итоге будут собираться мусором (это отбрасывается из мастер , что-либо в master , чего нет в HEAD ). Вы также, вероятно, захотите повторно подключить свою HEAD к этому обновленному мастеру после этого.

git checkout master

Вместо двух приведенных выше команд вы можете сначала повторно подключить HEAD , а затем сбросить master этими двумя последовательными командами:

git checkout master         # reattach, commit at HEAD is now the unwanted commit
git reset --hard HEAD@{1}   # reset master to the commit at HEAD before the prior command

The HEAD@{1} notation is used to access entries in the reflog. This example just means “the previous HEAD” (i.e. “the commit at HEAD before the most recent operation that affected HEAD”).

23
ответ дан 3 December 2019 в 03:35
поделиться
git checkout HEAD
git reset HEAD^

Это удалит самую последнюю фиксацию. Убедитесь, что он работал с svn log .

Я заметил, что вы отметили этот git-svn. Это будет работать, только если вы еще не отправили испорченный коммит в svn. Если да, то вам нужно будет применить обратное слияние ошибочной фиксации следующим образом:

$ git log
commit 30480f327040f812cb2afffdd1cdd374bf26fe83
Author: you
Date: today

    messed up commit

$ git revert 30480f327040f812cb2afffdd1cdd374bf26fe83

где 30480f327040f812cb2afffdd1cdd374bf26fe83 - хэш ошибочной фиксации.

3
ответ дан 3 December 2019 в 03:35
поделиться

Я думаю, что вы ищете git reset :

git checkout HEAD
git reset --hard HEAD^

Это вернет "master" к ревизии, предшествующей текущей HEAD. То, с чем вы сейчас работаете, называется «отделенной головой», поскольку с ней не связано символическое имя.

1
ответ дан 3 December 2019 в 03:35
поделиться
Другие вопросы по тегам:

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