Рубрики
Uncategorized

Советы по Git для развития на основе багажника

Разработка багажника — это модель разветвления исходного кода, направленная на смягченную интеграцию кода и Del … Tagged с Git, DevOps, Bash, Tutorial.

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

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

Git Pull -r.

С развитием багажника, основанная на багажнике, ветвь Master (или Tunk), вероятно, довольно часто обновит, пока вы не реализуете свой Маленькая особенность в вашей собственной ветке Отказ Чтобы сохранить синхронитуру, убедитесь, что ваш изменение всегда применяется на вершине последней версии Master:

1. Убедитесь, что вы находитесь в вашей филиале функции:

$ git branch
master
* my-awesome-feature

2А. Теперь давайте переиграем наши изменения на вершину мастера на местной ветке:

$ git pull -r origin master

Эта команда гарантирует, что последние изменения от происхождения выбираются до перезагрузки на них.

2b Другой вариант, если вы хотите больше контроля над своими коммуникациями, — это интерактивно убрать:

$ git pull --rebase=interactive

Это будет перечислять все коммиты, которые будут применяться на вершине мастера на местном отделении:

pick 1ff6000 Brilliant commit
pick f144bad Even better commit
pick dc69aa1 Average commit

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

pick 1ff6000 Brilliant commit
pick f144bad Even better commit
fixup dc69aa1 Average commit

ПРИМЕЧАНИЕ. Fixup будет отказаться от сообщения об урегулировании Commit

Временно парковки ваши изменения

Возможно, вы начали развивать что-то новое локально, когда кто-то из команды нуждается в том, чтобы рассмотреть свой запрос на тягу. Чтобы не потерять свой прогресс, вы должны убедиться, что вы храните его где-то, прежде чем проверять изменения в рассмотрении.

Git Stash

Git-Stash Помогает вам с этим, скрывая ваши изменения локально.

$ git stash -u -m"Exploring a possible AI-based blockchain compiler 🤯"

Переключатель -U гарантирует, что также не развлекаются файлы, которые довольно аккуратно. Stashing не требует сообщения Но я нахожу это довольно полезным при возобновлении моей припаркованной работы.

Теперь вы можете убедиться, что ваши изменения скрыты, делая:

$ git stash list
stash@{0}: On ai-spike: Exploring a possible AI-based blockchain compiler 🤯

Теперь вы готовы проверить чужой код. Когда вы готовы вернуться к тому, что вы работали на вы можете:

$ git stash pop

Который автоматически применит последнее скрытое изменение и удалить его из коллекции Stashes (если никаких конфликтов не происходит, в противном случае вам придется вручную сбросить его, когда вы будете решать конфликты).

Или , вы можете использовать

$ git stash apply

Что сделает так же, как POP, но без автоматического отбрасывания изменений в коллекции Stashes.

Обе команды принимают ссылку на тайник (в форме Stash @ {} ), которые вы можете использовать для раскрытия определенных изменений.

Git Commit -M «WIP»

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

Что вы можете сделать:

$ git branch
* my-temp-branch
master
$ git add --all
$ git commit -m"[WIP] Current progress on AI-based blockchain compiler 🤯"

Мне нравится префикс мои коммиты с общими ярлыком, такими как WIP (работают в процессе работы), когда это так.

Когда вы готовы возобновить свою работу, вы можете сделать:

$ git checkout my-temp-branch
$ git reset HEAD~1 # assuming you've stored everything in the last commit

Сброс восстановит ваше текущее состояние рабочего каталога, к тому, как оно было незадолго до фиксации, сохраняя модификации вашего WIP Commit (если вы не укажете --hard ).

Git Rebase.

Несмотря на то, что я упомянул ребазу как часть участка тяги, я буду использовать команду чистого GIT REBASE здесь, чтобы покрыть немного другой случай.

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

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

Допустим, вы хотите просмотреть все 7 коммит, которые вы попали в свою ветку, поскольку Master. (Pro Tip: Если вы не помните, сколько выясните вы расходящиеся от мастера, вы можете сделать: Git Log Master ... который будет визуализировать только соответствующие)

$ git branch
* lovely-branch
master
$ git rebase -i HEAD~7

Ваш настроенный редактор откроется с 7 коммитами, ожидающими, как позаботиться:

pick 30d730d It begins...
pick abd7151 Made some progress...
pick ba722fd Tests pass!
pick 06566b7 Added one more test case
pick 6bc75a2 Refactored class names
pick cb81607 Added docs
pick 2f9b368 Fixed typo in docs

Мы могли бы переписать историю следующим образом:

pick 30d730d It begins...
sqaush abd7151 Made some progress...
fixup ba722fd Tests pass!
fixup 06566b7 Added one more test case
reword 6bc75a2 Refactored class names
reword cb81607 Added docs
fixup 2f9b368 Fixed typo in docs

При первом Squash нас просим внести изменения в сообщение Commit: мы можем указать что-то более описательное, как «Новая цель Compilation: Webassembly». Последующий Fixup S потеряет свое посвящение. Затем первый элемент Reword потребует от нас, чтобы указать новое сообщение Commit: «Переименованные WASM * классы для WA * классов». Наконец, последний Rewordwill становится: «Добавлена отсутствующая секция документации для The Webassembly Target».

b981780 New compilation target: WebAssembly
16cde4c Renamed WASM* classes to WA* classes
451eaf2 Added missing documentation section for the WebAssembly target

Гораздоочищенная история филиала.

Используйте IForce (с арендой)

Если ваша филиала уже была выдвинута на ваш пульт, прежде чем переписать свою историю, вам придется быть явным по поводу перезаписи.

$ git push --force-with-lease lovely-branch:lovely-branch

Это перезаписывает удаленную историю текущей отрасли, если она будет, как и ожидалось (например, он соответствует местному Ref of Reect).

Вот более подробное объяснение :

«Что -Force-с арендой не имеет возможности обновлять ветку, если это не является государством, которое мы ожидаем; то есть никто не обновил филиал вверх по течению. На практике это работает, проверяя, что восходящий этах — это то, что мы ожидаем, поскольку Refs — это хэши, и неявно заканчивается цепочкой родителей в их ценность ».

К сожалению, -Force-с арендой Не сможет защитить вас, если вы (или ваша IDE) выполняют на заднем плане, потому что Git не сможет обнаружить какие-либо различия с ожидаемым удаленным Ref.

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

Заключение

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

Если вы хотите услышать больше от меня о программных инженерных практиках Следуй за мной в Twitter Отказ

Фото Высыхание Августанс на Бессмысленно

Первоначально опубликовано на Clubhouse.io.о.

Оригинал: «https://dev.to/alediaferia/git-tips-for-trunk-based-development-1i1g»