Какво е Head в Git?

Понякога виждате документацията на Git, отнасяща се до нещо, наречено HEAD. Например, клонът трябва да бъде напълно интегриран в HEAD. Но какво точно е Git HEAD?

В тази статия ще се запознаем повече с Git HEAD, но преди това просто ще обобщим какво представлява Git и за какво се използва. Git е инструмент за разпределен контрол, използван не само от продуктови мениджъри и разработчици, но и от учени за данни за управление на развитието на изходния код на програмата и нейната история.

HEAD указател в Git

Git поддържа променлива за препращане, наречена HEAD към най-новия ангажимент в неотдавнашния клон на касата. Можете да си представите HEAD като "текущия ангажиран клон". И можем да мислим като указател, тъй като целта на тази променлива е да посочи или да действа като препратка към определен запис в хранилището. Кажете, ние правим нов ангажимент в репо, след което показалеца или HEAD ще се премести или промени позицията си, за да посочи нов ангажимент.

HEAD сочи към началната точка на настоящия клон в хранилището по всяко време. Може да се мисли като последно състояние или последна проверена точка в хранилище. С други думи, HEAD е указател към родителя на следващите команди или където следващият ангажимент ще се случи, тъй като там репото е спряно.

Добра аналогия би бил звукозаписът и клавишите за възпроизвеждане и запис на него като ГЛАВА. Когато аудиото започва да записва, лентата се движи напред, минавайки покрай главата, като записва върху нея. Бутонът за спиране спира записа, като все още сочи към точката, която последно е записал, и точката, в която главата на записа е спряна, е мястото, където ще продължи да записва отново, когато натиснете отново. Ако се движим наоколо, показалецът на главата се премества на различни места, но когато отново се натисне Record започва запис от точката, към която е сочила главата, когато е натиснат Record.

В Git можете да използвате командата по-долу, за да видите какво сочи HEAD показалеца.

cat .git / HEAD:

  • Показва съдържанието на .git / HEAD, както е показано по-долу
  • ref: refs / head / master
  • По същество това е символично позоваване на най-новия ангажиран клон, който сте проверили и ефективно насочва към ангажимента в началото на текущия клон.

Всеки път, когато направим нов ангажимент, както е показано по-долу, той се добавя преди текущата HEAD, което прави Git автоматично насочва HEAD към новия ангажимент.

git diff HEAD..HEAD ~ 3: По-точно, HEAD е движещ се указател, който би могъл да се отнася до текущия клон, или не може, но винаги се отнася до „текущия ангажимент“. То (настоящият ангажимент) е ангажиментът „git ангажимент“ е изграден отгоре и често се сравнява с „git diff-cached“ и „git status“.

git log @: Въвеждането на „HEAD“ отнема време, особено когато има пряк път, вместо това „@“. Символът „@“ е избран, защото естествено следва синтаксиса (напр. (u)), но различен от това няма препратка или операция и когато няма нито един от тях, „HEAD 'може да се предположи вместо @.

1. Отделна глава

Възможно е HEAD да посочи конкретна промяна, която все още не е свързана с името на клона. Това е ситуацията, която се нарича обособена HEAD и се случва, когато някой провери нещо различно от (локален) клон, да кажем конкретен ангажимент, отдалечен клон или маркер. Следователно отделената HEAD може да се използва за проверка на ангажимент, който не сочи към началната точка на някой съществуващ клон, или за създаване на чисто нов ангажимент, който не е задължително рефериран от известен клон.

Да вземем пример, когато проверяваме извършването на b по един или друг начин

  • git checkout master ^#or
  • git checkout v3.1

Забележете, че без значение коя от командите за проверка се използва, HEAD вече ще се позовава на b. Този статус на b се нарича състояние на отделена HEAD.

Нека разгледаме примерите по-долу, за да видим какво се случва, когато се създаде ангажимент:

git checkout -b foo: Първо се създава нов клон с име foo, който се препраща към f f, което от своя страна актуализира HEAD, за да сочи към foo foo. Това означава, че вече няма да е в състояние на отделена ГЛАВА.

git разклонение foo: Това създава нов клон, наречен foo, който е посочен да извърши f, но HEAD се оставя отделен.

git tag foo: Това също създава нов маркер, наречен foo, който се препраща към f, но HEAD се оставя отделен.

Да предположим, че сте сменили позиция, различна от команда f, след това името на обекта първо трябва да бъде възстановено (обикновено става с помощта на командата git reflog) и след това се създава препратка към него.

За да разберете последните две команди, за които се отнася HEAD, използвайте една от следните команди:

  • git log -g -2 HEAD #or
  • git reflog -2 HEAD

2. ORIG_HEAD

Има още един вид ГЛАВА, за който трябва да знаете. Командите „сливане“ или „дърпане“ винаги оставят оригиналния връх на текущия клон в нещо, наречено ORIG_HEAD. Може да се използва с помощта на следните команди.

git reset - твърд ORIG_HEAD: Използвайки това, нулирането на твърди връща индексния файл заедно с работното дърво обратно в първоначалното му състояние, като същевременно нулира върха на клона към този ангажимент, но отхвърля локалните промени.

git reset –мерge ORIG_HEAD: Но какво ще стане, ако искате да запазите локалните промени, така че можете да използвате горната команда, за да запазите локалните промени.n Освен това, сливането винаги поставя „.git / ORIG_HEAD“ в първоначалното състояние на HEAD, така че проблемно сливане може да бъде отстранено с помощта на 'git reset ORIG_HEAD'. В допълнение към това, обединяването задава „.git / ORIG_HEAD“ към първоначалното състояние на HEAD по всяко време, така че да премахнете проблемното сливане, като използвате „git reset ORIG_HEAD“.

Ако се сблъскате с някакъв проблем с множество команди, ORIG_HEAD е зададен на началната точка на текущия клон, преди да приложите някакви кръпки, тъй като грешка в комитите може да бъде по-лесно коригирана по този начин.

Предимства на Git HEAD

  • Използва се за насочване към наскоро ангажирания клон.
  • Може да се използва за извършване на промени от последната посетена точка.
  • Може да се използва и за преминаване към различни точки от историята и работа от там.
  • Поддържа хранилището и процеса чисти и четими.

заключение

Git има много приложения и се използва широко от разработчици, продуктови мениджъри и учени по данни. Командите му са много ефективни и могат да бъдат много полезни. HEAD е препратка към последния ангажимент в разгледания в момента клон.

Препоръчителни статии

Това е ръководство за това какво е Head in Git ?. Тук обсъждаме HEAD показалеца в Git, който включва отделени HEAD и ORIG_HEAD, заедно с предимствата на Git HEAD. Можете също да разгледате следните статии, за да научите повече -

  1. Какво е Git Fetch?
  2. Git Fetch срещу Git Pull
  3. Какво е Git Branch?
  4. Git терминология
  5. Система за управление на версиите GIT
  6. Git Push
  7. Три етапа от жизнения цикъл на Git с работния процес
  8. Как да използвате GIT Cherry-pick с пример?

Категория: