Как стать автором
Обновить

IntelliJ IDEA Changelists и Git Staging

Время на прочтение9 мин
Количество просмотров15K
Автор оригинала: Helen Scott

С момента выпуска IntelliJ IDEA 2020.3 есть два способа управлять своими коммитами в Git. Первый - посредством существующей функциональности со списками изменений (Changelists) IntelliJ IDEA, второй - благодаря поддержке Git staging. Это сообщение блога знакомит с обоими подходами и показывает различия. Не существует правильного или неправильного ответа, это случай выбора метода, который лучше всего подходит для вас или который вам больше всего знаком.

Прежде чем мы начнем, важно знать, что как списки изменений IntelliJ IDEA, так и Git staging позволяют закоммитить часть файла, целый файл или несколько файлов в Git. То, как они этого достигают, немного отличается, но конечный результат тот же. Список изменений IntelliJ IDEA работает с понятием диапазона в вашем контенте. Все изменения в этом диапазоне будут частью коммита. Git staging использует стандартное для git понятие staging области (также известное как «index»).

Оба варианта: IntelliJ IDEA Changelists и Git Staging доступны из Commit окна инструментов. Из IntelliJ IDEA 2020.1 вы можете переключиться на использование этого немодального окна Commit  с помощью ⌘, в macOS или Ctrl + Alt + S в Windows / Linux, чтобы отобразить Preferences/Settings. Оттуда введите commit и установите флажок «Use non-model commit interface». Вы также можете использовать ⌘⇧A (macOS) или Ctrl + Shift + A (Windows / Linux) для поиска действий и ввести «Commit». Затем вы можете получить к нему доступ, нажав ⌘0 в macOS или Alt0 в Windows и Linux.

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

Что такое «Список изменений IntelliJ IDEA»?

До выпуска 2020.3 списки изменений IntelliJ IDEA были единственным способом закоммитить изменения в вашем репозитории Git.

Списки изменений IntelliJ IDEA предназначены не только для Git, они для любой поддерживаемой системы VCS, но в этом блоге мы сосредоточимся на Git, чтобы мы могли сравнить их с новой функциональностью Git staging.

Коммит всего файла

IntelliJ IDEA всегда предоставляет вам список изменений по умолчанию, и при изменении файла файл будет отображаться в списке изменений по умолчанию с флажком, который не установлен:

Оттуда, если вы хотите выбрать весь файл для коммита, вы можете установить флажок слева от имени файла:

Это означает, что, когда вы коммитите свои файлы в Git, все изменения в выбранном вами файле будут добавлены, а затем сохранены в git. IntelliJ IDEA запускает за вас как команду, так git add так и команду git commit.

Коммит части файла

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

Обратите внимание, что если вы выбираете только часть файла для коммита, как в этом примере, Default Changelist будет указывать, что файл будет частично закоммитен, с помощью линии внутри чекбокса рядом с именем файла в Default Changelist, как вы можете видеть выше.

Совет: Вы также можете использовать ⌘D или Ctrl + D, чтобы открыть представление diff  из окна инструмента commit.

Отмена изменений

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

Вы также можете откатить весь файл, щелкнув его правой кнопкой мыши и выбрав Rollback.

Несколько Changelists

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

Чтобы создать несколько списков изменений, вы можете щелкнуть правой кнопкой мыши на Default Changelist и выбрать «New Changelist»:

Перемещение изменений между списками изменений

Вы также можете перемещать файлы между списками изменений (Changelists). Вы можете переместить весь файл в новый список изменений и создать этот новый список изменений, если он еще не существует в рамках этого действия. Для этого вы можете щелкнуть правой кнопкой мыши файл в списке изменений в окне Commit и выбрать «Move to Another Changelist». Вам будет предложено выбрать список изменений, если он существует, или создать список изменений, если его нет. Когда вы создаете новый список изменений, вы можете дополнительно установить для него значение «Active». Это означает, что все будущие изменения будут назначены этому Changelist.

В этом примере все будущие изменения будут теперь назначены нашему списку изменений DateFormat, потому что мы установили его как «Активный» при его создании.

В диалоговом окне «New Changelist» есть флажок, который называется «Track context». Если вы работаете с задачами и контекстами и подключили IntelliJ IDEA к соответствующему стороннему приложению, вы можете использовать этот флажок, чтобы заставить IntelliJ IDEA управлять контекстом задачи.

Помимо перемещения целых файлов между списками изменений, вы также можете перемещать отдельные изменения в файле между списками изменений. Это особенно полезно, если вы работаете над изменениями, которые влияют на один файл, но вы хотите разделить коммиты по причинам, о которых мы говорили ранее. Для того, чтобы присвоить некоторые, но не все изменения в файле на другую группу изменений, щелкните правой кнопкой мыши на изменение в представлении diff в Your version на правой стороне. Затем вы можете выбрать «Move to another changelist». Вы также можете использовать клавиши ⇧⌘M в macOS или Alt + Shift + M в Windows и Linux.

Вы также можете перемещать изменения между списками изменений, используя цветные полосы в gutter:

Как сделать Changelist активным

Наконец, мы уже показали вам, как сделать новый список изменений активным, но стоит упомянуть, что IntelliJ IDEA необходимо знать, какой список изменений использовать для новых изменений; вам всегда нужен один активный список изменений. Вы можете выбрать, какой список изменений является активным, если у вас их несколько, щелкнув правой кнопкой мыши список изменений и выбрав «Set Active Changelist». Если вы не видите эту опцию, это потому, что выбранный вами Changelist уже является активным Changelist.

Когда вы коммитите какие-либо новые изменения, они по умолчанию будут помещены в ваш активный список изменений IntelliJ IDEA Changelist.

Коммит ваших изменений в Git

Теперь, когда у вас есть списки изменений IntelliJ IDEA и ваши изменения разделены так, как вы хотите, вы готовы закоммитить их в Git. Вы можете увидеть, что будет закоммитено в Git, в окне «Commit».

Когда вас это устраивает, вы можете использовать ⌘K в macOS или Ctrl + K в Windows и Linux, чтобы открыть окно Commit. Перед тем, как нажать «Commit», вам необходимо ввести комментарий к коммиту. После того, как вы это сделаете и нажмете Commit, чтобы закоммитить их в истории Git локально, IntelliJ IDEA выполнит две команды git:
git add
git commit

Это добавляет файлы и закоммитит их за один шаг в вашей локальной истории Git. Затем вы можете продолжить и отправить изменения в удаленный репозиторий, если хотите.

Что такое Git Staging?

IntelliJ IDEA 2020.3 представила поддержку Git staging. По умолчанию он не включен, но самый быстрый способ включить его - это использовать команду Find Actions ( ⇧⌘A в macOS или Ctrl + Shift + A в Windows и Linux) и ввести git staging. Git staging - это нативный для git способ коммита изменений файлов в репозитории git.

Затем вы можете включить его:

Вы также можете включить Git staging из диалогового окна Settings/Preferences с помощью команд  в macOS или Ctrl + Alt + S, а затем введя git staging.

С помощью Git staging процесс коммита управляется в два этапа. Когда вы обрабатываете файл или его часть, IntelliJ IDEA запускает команду git add для внесения изменений. Когда вы впоследствии закоммитите эти файлы или некоторые изменения файла, IntelliJ IDEA запускает команду git commit. Конечный результат тот же, однако с Git staging вы можете воспользоваться преимуществами добавления ваших изменений перед их коммитом, если вы более знакомы с этой моделью.

Папки Staged и Unstaged 

С Git Staging вы увидите две папки, а не одну как в IntelliJ IDEA Changelist в окне Commit. Каждое изменение, которое вы вносите в свой файл, представляет собой разницу между вашим локальным файлом и HEAD. Папка Unstaged, где все ваши изменения будут появляться на начальном этапе. Чтобы включить изменения в следующий коммит, вам необходимо переместить его из Unstaged папки в Staged папки. Это означает, что IntelliJ IDEA выполняет команду git add для всех изменений в файле.

Staging - перемещение файла из папки Unstaged в папку Staged

Когда вы вносите изменения в файл, они сначала появятся в вашей папке Unstaged  как изменения, которые вы можете подготовить к коммиту (stage). Вы можете подготовить весь файл, перетащив его в папку Staged, используя значок + в дереве или щелкнув правой кнопкой мыши и выбрав +Stage. IntelliJ IDEA запустит команду git add, когда вы выполните эти действия:

Git add изменяет содержимое файла в индексе (поэтапное содержимое). Если вы впоследствии измените контент внутри того же диапазона, он не будет закоммитен, пока не будет помещен в папку Staged. Вы можете использовать Staged область, чтобы изменить то, что будет закоммитено, независимо от любых изменений в локальных файлах. С помощью IntelliJ Changelists любое изменение внутри того же диапазона будет закоммитено.

Staging - перемещение части файла из папки Unstaged в папку Staged

Кроме того, вы можете добавить часть файла, дважды щелкнув файл в папке Unstaged и используя стрелки <> на Staged области слева:

Вы также можете откатить весь файл, выбрав его в области Unstaged и выбрав «Rollback» (или «Revert» до версии 2021.1»). Это откат файла до состояния в индексе, а не в HEAD.

Давайте посмотрим на эту функциональность в Staged области. Изменения в Staged области означают, что IntelliJ IDEA выполнила операцию git add для изменения файла.

Unstaging - перемещение файла из папки Staged в папку Unstaged

Вы можете передумать и решить, что хотите отменить изменения (Unstage) файла целиком. Как при выполнении Staging для файла, вы можете перетащить его из Staged папки в Unstaged папку, нажав значок * - ** в дереве, или правой кнопкой мыши и выбрав «Unstage»:

Когда вы Unstage файл или часть файла, IntelliJ IDEA запускает команду git reset для изменения файла.

Unstaging - перемещение части файла из папки Staged в папку Unstaged

Вы также можете отменить изменение в файле, если вам нужно. Чтобы сделать это, вам нужно открыть в представлении diff файл, который содержит изменения, которые вы хотите убрать из папки Staged. Затем вы можете использовать стрелки >> в staged  части слева, чтобы отменить изменение (Unstage). Это приведет к отмене этого конкретного изменения, и снова IntelliJ IDEA запустит команду Git, чтобы отразить изменение. Вы также можете ввести текст в редакторе, если хотите.

Staging и Unstaging отдельных изменений с помощью значков в Gutter 

Вы также можете использовать значки Gutter в IntelliJ IDEA для внесения отдельных изменений.

Когда вы кликните на сплошную цветную панель, вы можете выбрать внесение изменений (Staging), панель изменит вид после добавления изменений. Нажав на панель в gutter, вы сможете отменить эти изменения.

Коммит изменений

Если Git Staging включен, ваша коммит будет состоять из изменений (различий), которые есть в вашей Staging  папке. Если вас они устраивают, вы можете использовать команду ⌘K (macOS) или Ctrl + K (Windows / Linux) для открытия окна Commit. Затем вы можете ввести комментарий к коммиту и нажать Commit, чтобы закоммитить выбранные вами изменения в Git. Кроме того, вы можете использовать команду ⌘⏎ (macOS) или Ctrl + Enter (Windows / Linux), чтобы закоммитить изменения. После чего IntelliJ IDEA выполнит необходимые команды Git для выбранных вами изменений.

Затем вы можете продолжить и выполнить push изменений в удаленный репозиторий, если хотите.

Резюме

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

  • Changelists фокусируется на диапазонах в вашем контенте, то есть любые изменения в этом диапазоне в вашем файле включаются в коммит.

  • Git Staging фокусируется на создании коммита моментального снимка staging  области. Staged контент эффективно блокируется. Вы можете приступить к редактированию файла, даже если он был помещен в папку Staged; Staged контент не изменится. Это позволяет вам готовить коммиты поэтапно.

Теги:
Хабы:
Всего голосов 3: ↑3 и ↓0+3
Комментарии1

Публикации