Мне было любопытно где 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
Теперь, когда я делаю коммиты в свой проект, он показывает 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
”).
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 - хэш ошибочной фиксации.
Я думаю, что вы ищете git reset
:
git checkout HEAD
git reset --hard HEAD^
Это вернет "master" к ревизии, предшествующей текущей HEAD. То, с чем вы сейчас работаете, называется «отделенной головой», поскольку с ней не связано символическое имя.