Развитие на основе багажника Модель ветвления исходного кода, направленная на смягченную интеграцию кода и риск доставки. Если это успешно внедрено, это помогает сократить время выполнения заказа в доставке стоимости продукции.
В этом посте я не собираюсь сосредоточиться на преимуществах развития багажника, а скорее, я постараюсь набросать несколько примеров того, как 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»