ГОЛОВА и ORIG_HEAD в мерзавце

Сортировать один список и найти LIS в другом. Код C ++ ->

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
bool cmp(pair<int,int> a, pair<int,int> b){
    return a.first<b.first;
}

int bridges(vector<pair<int,int> > connect){
    int i, j, n=connect.size();
    sort(connect.begin(),connect.end(),cmp);
    vector<int> lis(n,1);
    int m=0;
    for(i=0;i<n;i++){
        for(j=i-1;j>=0;j--){
            if(connect[i].second>connect[i].first)lis[i]=max(lis[i],lis[j]+1);
        }
        m=max(m,lis[i]);
    }
    return m;
}

int main(){
    int n, i;
    cin >> n;
    vector<pair<int,int> > a(n);
    for(i=0;i<n;i++)cin >> a[i].first >> a[i].second;
    cout << bridges(a) <<endl;
    return 0;
}
229
задан Ankur Agarwal 31 October 2015 в 12:52
поделиться

3 ответа

HEAD - это (прямая или косвенная, т.е. символическая) ссылка на текущую фиксацию. Это фиксация, которую вы проверили в рабочем каталоге (если вы не внесли какие-либо изменения или аналогичные), и это фиксация, поверх которой «git commit» создаст новую. Обычно HEAD является символической ссылкой на некоторую другую именованную ветвь; эта ветка в настоящее время является извлеченной веткой или текущей веткой. HEAD также может указывать непосредственно на фиксацию; это состояние называется «отключенной HEAD», и его можно понять как нахождение в безымянной анонимной ветке.

И только @ является ярлыком для HEAD , поскольку Git 1.8.5

ORIG_HEAD - это предыдущее состояние HEAD , установленное командами, которые могут иметь опасное поведение, чтобы их можно было легко восстановить.HEAD @ {1} примерно эквивалентен ORIG_HEAD ( HEAD @ {1} всегда является последним значением HEAD , ORIG_HEAD ] - последнее значение HEAD перед опасной операцией).

Для получения дополнительной информации прочтите git (1) manpage , Руководство пользователя Git , Книга сообщества Git и Глоссарий Git

297
ответ дан 23 November 2019 в 03:43
поделиться

Насколько я понимаю, HEAD указывает на текущую ветвь, а ORIG_HEAD используется для хранения предыдущей HEAD перед выполнением «опасных» операций.

Например, git-rebase и git-am записывают исходный конец ветки, прежде чем вносить какие-либо изменения.

2
ответ дан 23 November 2019 в 03:43
поделиться

Из git reset

"pull" или "merge" всегда оставляет исходную вершину текущей ветви в ORIG_HEAD .

git reset --hard ORIG_HEAD

Жесткий сброс на он возвращает ваш индексный файл и рабочее дерево в это состояние и сбрасывает кончик ветки до этой фиксации.

git reset --merge ORIG_HEAD

Проверив результат слияния, вы можете обнаружить, что изменение в другой ветви неудовлетворительное. Выполнение « git reset --hard ORIG_HEAD » позволит вам вернуться туда, где вы были, но отменит ваши локальные изменения, которые вам не нужны. « git reset --merge » сохраняет ваши локальные изменения.


Перед применением каких-либо исправлений ORIG_HEAD устанавливается в конец текущей ветви.
Это полезно, если у вас есть проблемы с несколькими коммитами, например, запуск ' git am ' в неправильной ветке или ошибка в коммитах, которую легче исправить, изменив почтовый ящик (например, + ошибки в поле «От : "строки).

Кроме того, слияние всегда устанавливает ' .git / ORIG_HEAD ' в исходное состояние HEAD, поэтому проблемное слияние можно удалить с помощью ' git reset ORIG_HEAD '.


Примечание: из здесь

HEAD - движущийся указатель. Иногда это означает текущую ветвь, иногда нет.

Итак, HEAD НЕ уже везде синоним «текущей ветви».

HEAD означает «текущая» везде ] в git, но это не обязательно означает «текущую ветвь» (т.е. отсоединенную HEAD). Это коммит « git commit », который строится поверх, и « git diff --cached » и « git status » в сравнении с.
Это означает, что текущая ветка только в очень ограниченном контексте (именно тогда, когда нам нужна ветка имя, над которым нужно работать - сброс и расширение кончика ветки с помощью фиксации / перебазирования / и т. д.).

Reflog - это средство, позволяющее вернуться в прошлое, и машины времени имеют интересное взаимодействие с понятием «текущий».

HEAD @ {5.minutes.ago} может означать «разыменование HEAD symref, чтобы узнать, в какой ветке мы находимся ПРЯМО СЕЙЧАС, а затем выяснить, где кончик этой ветки был 5 минут назад».
В качестве альтернативы это может означать «что это за коммит, который я бы назвал HEAD 5. минут назад, например, если я тогда сделал «git show HEAD».


git1.8.4 (июль 2013 г.) вводит вводит новую нотацию!
(на самом деле, это будет для 1.8.5 или 1.9, четвертый квартал 2013: повторно введено с commit 9ba89f4 )

Вместо того, чтобы вводить четыре заглавные буквы « HEAD », вы можете сказать « @ "сейчас,
например, « git log @ ».

См. commit cdfd948

Ввод « HEAD » утомителен, особенно когда мы можем использовать « @ ] ».

Причина выбора« @ »заключается в том, что это естественно следует из синтаксиса ref @ op (например, HEAD @{u} ), за исключением того, что у нас нет ни ссылки, ни операции, а когда у нас их нет, имеет смысл предположить « HEAD ».

Итак, теперь мы можем использовать ' git show @ ~ 1 ' и все прочее.

До сих пор ' @ ' было допустимым именем, но оно противоречит этой идее, поэтому давайте сделаем это недействительным. Вероятно, очень немногие люди, если таковые имеются, использовали это имя.


Сообщение в блоге в период 1.8.4-rc3 (14 августа 2013 г.) объявило, что эта функция была отменена и отложена (Спасибо Cupcake для хедз-ап ).
Опять же, он снова вводится с commit 9ba89f4 (сентябрь 2013 г.).

См. commit 2c2b664 :

Revert "Добавить новый ярлык @ для HEAD "

Это отменяет фиксацию cdfd948 , поскольку это не относится только к« @ »(и формам с модификаторами вроде @ {u } применяется к нему), но также влияет, например, на " refs / heads / @ / foo ", чего не должно быть.

Основная идея предоставления короткой позиции может быть хорошей , и эту тему можно будет повторить позже, но давайте вернемся, чтобы не затрагивать существующие варианты использования на данный момент для предстоящего выпуска.

97
ответ дан 23 November 2019 в 03:43
поделиться
Другие вопросы по тегам:

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