Висячий вчинок - це зобов'язання, яке не пов'язане з посиланням, тобто немає способу його досягти.
Наприклад, розглянемо діаграму нижче. Припустимо, що ми видаляємо функцію гілкиX без об'єднання її змін, тоді фіксація D перетворюється на звисаючу фіксацію, оскільки немає посилання, пов'язаної з нею. Якби це було об'єднано в master, тоді HEAD та master посилання вказували б на виконання D, і це більше не буде звисати, навіть якщо ми видалили функціюX. Прочитайте замітку після схеми, щоб зрозуміти це краще.
Git автоматично збирає сміття (тобто утилізує), що звисає. Ми можемо використовувати git reflog
для відновлення гілки (висячих комітетів), яку було видалено без об'єднання. Ми можемо відновити видалені комісії, лише якщо вони є в локальному магазині об'єктів. Якщо це було зібране сміття, ми не можемо його відновити.
Зверніть увагу, що назва гілки, тобто мітка гілки, насправді є посиланням на останню комісію гілки, тобто на кінчик гілки. На діаграмі вище, FeatureX, master та HEAD - лише посилання на конкретні коміти. labelX і основні мітки стосуються останніх комісій у відповідних галузях. HEAD, як правило, відноситься до кінця перевіреної в даний час гілки (майстра в цьому випадку). Якщо ви зареєструєте старішу комісію на вашій поточній гілці, то HEAD буде знаходитись у відокремленому стані, тобто вона вказуватиме на старішу комісію замість останньої. Також зверніть увагу, що HEAD називається символічним посиланням, оскільки він фактично вказує на поточну мітку гілки, а будь-яка мітка гілки завжди вказує на кінчик гілки. Таким чином, за звичайних обставин, HEAD опосередковано вказує на останнє зобов'язання.
Зауважте, що Git представляє свій графік / історію фіксації як спрямований ациклічний графік . Кожен комітет має посилання на його батьків. Отже, стрілки в діаграмі фіксування вказують від дочірньої фіксації до батьківської фіксації. Нам потрібна посилання на останнє дочірнє зобов’язання, щоб досягти старших домовленостей на гілці.
PS - Наведена вище схема та розуміння отримані з цього безкоштовного курсу . Незважаючи на те, що курс досить старий, знання все ще актуальні.
git gc
, і 2) мені зовсім не потрібно про це турбуватися, тому що ці звисаючі шматочки є нормальними і вже git впоратися з ними?