Рубрики
Uncategorized

Краткое руководство по скворению GIT коммиты

Три метода очистки вашей истории Git. Помечено Git, Devtips, Devops.

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

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

Существует пара разных способов Squash Chartits, и выбор подходящего зависит от того, что нам нужно достичь.

Следующие примеры проиллюстрированы с использованием Git log --graph , с некоторыми вариантами краткости. Мы можем установить удобный псевдоним, чтобы увидеть этот формат журнала в нашем терминале с:

git config --global alias.plog "log --graph --pretty=format:'%h -%d %s %n' --abbrev-commit --date=relative --branches"

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

Это уместно, когда:

  • Мы связываемся непосредственно
  • Мы не намерены открыть запрос на тягу, чтобы объединить функцию
  • Мы не хотим сохранять историю ветвей или изменений Мы еще не толкнули

Этот метод берет травку, которое выглядит так:

*   3e8fd79 - (HEAD -> master) Fix a thing
|
*   4f0d387 - Tweak something
|
*   0a6b8b3 - Merge branch 'new-article'
|\
| * 33b5509 - (new-article) Update article again again
| |
| * 1782e63 - Update article again
| |
| * 3c5b6a8 - Update article
| |
* | f790737 - (master) Tweak unrelated article
|/
|
* 65af7e7 Add social media link
|
* 0e3fa32 (origin/master, origin/HEAD) Update theme

И заставляет это выглядеть так:

* 7f9a127 - (HEAD -> master) Add new article
|
* 0e3fa32 - (origin/master, origin/HEAD) Update theme

Вот как это сделать — держись за вашими Hoverboards это супер сложный:

git reset --soft origin/master
git commit

Да, это все. Мы можем удалить ненужную ветвь с Git Flather -D Новая статья Отказ

Это уместно, когда:

  • Мы хотим сквош последнее х совершает, но не все комбинирует с Происхождение/мастер
  • Мы хотим открыть запрос на тягу, чтобы объединить ветку

Этот метод берет травку, которое выглядит так:

* 13a070f - (HEAD -> new-article) Finish new article
|
* 78e728a - Edit article draft
|
* d62603c - Add example
|
* 1aeb20e - Update draft
|
* 5a8442a - Add new article draft
|
| * 65af7e7 - (master) Add social media link
|/
|
* 0e3fa32 - (origin/master, origin/HEAD) Update theme

И заставляет это выглядеть так:

* 90da69a - (HEAD -> new-article) Add new article
|
| * 65af7e7 - (master) Add social media link
|/
|
* 0e3fa32 - (origin/master, origin/HEAD) Update theme

Сквошить последние пять коммитов на ветке Новая статья в один, мы используем:

git reset --soft HEAD~5
git commit -m "New message for the combined commit"

Где --soft оставляет наши файлы нетронутыми и устроителями, а 5 Можно подумать о том, как «количество предыдущих комбинтов, которые я хочу объединить».

Тогда мы можем сделать Git Merge Master и создать наш запрос на тягу.

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

* dc89918 - (HEAD -> master) Add link
|
* 9b6780f - Update image asset
|
* 6379956 - Fix CSS bug
|
*   16ee1f3 - Merge master into branch
|\
| |
| * ccec365 - Update list page
| |
* | 033dee7 - Fix typo
| |
* | 90da69a - Add new article
|/
|
* 0e3fa32 - (origin/master, origin/HEAD) Update theme

Мы хотим сохранить часть этой истории, но очистить коммиты. Мы также хотим изменить сообщения для некоторых коммитов. Для этого мы будем использовать Гитбаза Отказ

Это уместно, когда:

  • Мы хотим сквош только некоторые коммиты
  • Мы хотим редактировать предыдущие сообщения
  • Мы хотим удалить или изменить определенные коммиты

Гит ребазу Мощный инструмент и удобный, как только у нас есть повешение. Чтобы изменить все коммиты с Происхождение/Мастер , мы делаем:

git rebase -i origin/master

Или мы можем сделать:

git rebase -i 0e3fa32

Где Commit Hash — последний коммит, который мы хотим сохранить как есть.

Опция позволяет нам запустить интерактивный ребазовый инструмент, который запускает наш редактор, по сути, сценарий для нас для изменения. Мы увидим список наших коммитов в обратном порядке в журнал Git, с самым старым наверху:

pick 90da69a Add new article
pick 033dee7 Fix typo
pick ccec365 Update list page
pick 6379956 Fix CSS bug
pick 9b6780f Update image asset
pick dc89918 Add link

# Rebase 0e3fa32..dc89918 onto 0e3fa32 (6 commands)
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
# d, drop = remove commit
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out
#
~

Комментарии дают нам удобное руководство относительно того, что мы можем сделать. На данный момент давайте выкрутим коммиты с небольшими изменениями в более значительные коммиты. В нашем редакторе мы меняем сценарий, чтобы выглядеть так:

pick 90da69a Add new article
squash 033dee7 Fix typo
pick ccec365 Update list page
squash 6379956 Fix CSS bug
squash 9b6780f Update image asset
squash dc89918 Add link

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

# This is a combination of 2 commits.
# This is the 1st commit message:

Add new article

# This is the commit message #2:

Fix typo

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# interactive rebase in progress; onto 0e3fa32
# Last commands done (2 commands done):
#    pick 90da69a Add new article
#    squash 033dee7 Fix typo
# Next commands to do (4 remaining commands):
#    pick ccec365 Update list page
#    squash 6379956 Fix CSS bug
# You are currently rebasing branch 'master' on '0e3fa32'.
#
# Changes to be committed:
#       modified:   ...
#
~

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

[detached HEAD 3cbad01] Add new article
 1 file changed, 129 insertions(+), 19 deletions(-)
Auto-merging content/dir/file.md
CONFLICT (content): Merge conflict in content/dir/file.md
error: could not apply ccec365... Update list page

Resolve all conflicts manually, mark them as resolved with
"git add/rm ", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".

Could not apply ccec365... Update list page

Опять же, инструмент предлагает некоторые очень полезные инструкции. Как только мы исправим конфликт слияния, мы можем возобновить процесс GIT REBASE --Континую Отказ Наша интерактивная ребаза поднимает, где он остановился.

Как только все сквош сделано, наше дерево Git выглядит так:

* 3564b8c - (HEAD -> master) Update list page
|
* 3cbad01 - Add new article
|
* 0e3fa32 - (origin/master, origin/HEAD) Update theme

ФГ, намного лучше.

Этот пост был с любовью разорван из более длинной статьи В моем блоге о GIT Commit Practices.

Оригинал: «https://dev.to/victoria/a-quick-guide-to-squashing-git-commits-7io»