Git

Как да Squash Git ангажира

Как да Squash Git ангажира

Как да смачкате ангажименти в Git, за да поддържате историята си чиста

Когато работите с Git, е добра идея да се ангажирате често, така че винаги можете да се върнете в състоянието на кода, ако объркате. Записването на всички тези мини промени в основния клон не винаги е добра идея. Това прави историята разхвърляна и трудна за проследяване.

Git предоставя начин да смачкате куп ваши фикси, като използвате командата rebase. След като направите локално промените си в определен файл или за определена функция, винаги можете да използвате метода на сквош, за да комбинирате промените заедно, преди да се ангажирате с основния клон. Това ще помогне на другите да разберат по-добре промените ви.

Предупреждение: Въпреки че можете да изтегляте от външни хранилища и да извършвате скуош ангажименти, това е лоша идея. Това може да създаде конфликти и объркване. Избягвайте промяна на историята, която вече е публична. Придържайте се само към смачкване на ангажименти, които са местни за вашата работа.

Нека да разгледаме примерен случай.

Да предположим, че имаме два файла a.py и b.py. Нека първо преминем през процеса на създаване на файловете и извършване на модификациите:

$ mkdir myproject
$ cd myproject /
$ git init
$ echo "print (" hello A ")"> a.py
$ git add -A && git commit -m "Добавен a.пи "
$ echo "print (" hello B ")"> b.py
$ git add -A && git commit -m "Добавено b.пи "
$ echo "print (" hello BB ")"> b.py
$ git add -A && git commit -m "b.py Модификация 1 "
$ echo "print (" hello BBB ")"> b.py
$ git add -A && git commit -m "b.py Модификация 2 "

Ако проверим историята на ангажиментите, ще видим следното:

$ git log --oneline --graph --decorate
* dfc0295 (HEAD -> master) b.py Модификация 2
* ce9e582 b.py Модификация 1
* 7a62538 Добавен b.py
* 952244a Добавен a.py

След като приключим с работата си, решаваме да поставим всички промени в b.py в един ангажимент за яснота. Ние броим, че има 3 ангажименти на b.py от ГЛАВАТА. Издаваме следната команда:

git rebase -i HEAD ~ 3

Опцията -i казва на Git да използва интерактивния режим.

Трябва да изскочи прозорец на вашия текстов редактор в Git:

pick 7a62538 Добавен b.py
изберете ce9e582 b.py Модификация 1
изберете dfc0295 b.py Модификация 2
 
# Пребазирайте 952244a… dfc0295 на 952244a (3 команда (и))
#
# Команди:
# p, pick = използвайте commit
# r, reword = използва ангажиране, но редактирайте съобщението за фиксиране
# д, редактиране = използване на ангажиране, но спиране за поправка
# s, squash = използвайте фиксация, но се влива в предишен фиксация
# f, fixup = като "тиква", но отхвърлете съобщението в дневника на този комит
# x, exec = команда за изпълнение (останалата част от реда) с помощта на shell
#
# Тези редове могат да бъдат пренаредени; те се изпълняват отгоре надолу.
#
# Ако премахнете ред тук, ЧЕ КОМИТЕТЪТ ЩЕ БЪДЕ ЗАГУБЕН.
#
# Ако обаче премахнете всичко, пребазирането ще бъде отменено.
#
# Обърнете внимание, че празните фиксирания се коментират
~

Комитите са изброени хронологично отгоре от най-ранните до най-новите. Можете да изберете кой ангажимент да „изберете“ и кой ангажимент да смачкате. За простота ще изберем първия ангажимент и ще смачкаме останалите в него. Така че ние ще модифицираме текста така:

pick 7a62538 Добавен b.py
скуош ce9e582 b.py Модификация 1
скуош dfc0295 b.py Модификация 2
 
# Пребазирайте 952244a… dfc0295 на 952244a (3 команда (и))
#
# Команди:
# p, pick = използвайте commit
# r, reword = използва ангажиране, но редактирайте съобщението за фиксиране
# e, редактиране = използване на ангажимент, но спиране за поправка
# s, squash = използвайте фиксация, но се влива в предишен фиксация
# f, fixup = като "тиква", но отхвърлете съобщението в дневника на този комит
# x, exec = команда за изпълнение (останалата част от реда) с помощта на shell
#
# Тези редове могат да бъдат пренаредени; те се изпълняват отгоре надолу.
#
# Ако премахнете ред тук, ЧЕ КОМИТЪТ ЩЕ БЪДЕ ЗАГУБЕН.
#
# Ако обаче премахнете всичко, пребазирането ще бъде отменено.
#
# Обърнете внимание, че празните ангажименти се коментират

Веднага след като запазите и затворите текстовия файл, трябва да се появи друг текстов прозорец, който изглежда така:

# Това е комбинация от 3 ангажирания.
# Съобщението на първия ангажимент е:
Добавено b.py
 
# Това е второто съобщение за фиксиране:
 
б.py Модификация 1
 
# Това е третото съобщение за фиксиране:
 
б.py Модификация 2
 
# Моля, въведете съобщението за ангажиране за вашите промени. Стартиране на линии
# с '#' ще бъде игнорирано и празното съобщение прекъсва фиксирането.
#
# Дата: петък 30 март 21:09:43 2018 -0700
#
# преработване в ход; върху 952244a
# В момента редактирате фиксиране, докато пребазирате клон 'master' на '952244a'.
#
# Промени, които трябва да бъдат извършени:
# Нов файл: b.py
#

Запазете и затворете и този файл. Трябва да видите нещо подобно:

$ git rebase -i HEAD ~ 3
[отделена ГЛАВА 0798991] Добавена b.py
Дата: петък 30 март 21:09:43 2018 -0700
1 файл е променен, 1 вмъкване (+)
режим на създаване 100644 b.py
Успешно пребазирани и актуализирани refs / heads / master.

Ако проверите историята на фиксиране сега:

$ git log --oneline --graph --decorate
* 0798991 (HEAD -> master) Добавено b.py
* 952244a Добавен a.py

Всички ангажименти за b.py са смачкани в един коммит. Можете да проверите, като погледнете b.py файл:

$ котка b.py
печат ("здравей BBB")

Съдържа съдържанието на Модификация 2.

Заключение

Пребазирането е мощна команда. Тя може да ви помогне да поддържате историята си чиста. Но избягвайте да го използвате за вече публични ангажименти, тъй като може да предизвика конфликти и объркване. Използвайте го само за вашето локално хранилище.

Допълнително проучване:

WinMouse ви позволява да персонализирате и подобрите движението на показалеца на мишката на компютър с Windows
Ако искате да подобрите функциите по подразбиране на показалеца на мишката, използвайте безплатна програма WinMouse. Той добавя още функции, за да ви ...
Бутонът на левия бутон на мишката не работи в Windows 10
Ако използвате специална мишка с вашия лаптоп или настолен компютър, но бутонът на левия бутон на мишката не работи на Windows 10/8/7 по някаква причи...
Курсорът скача или се движи произволно, докато пишете в Windows 10
Ако установите, че курсорът на вашата мишка скача или се движи самостоятелно, автоматично, произволно, докато пишете в лаптоп или компютър на Windows,...