Как сделать коммит pycharm
Перейти к содержимому

Как сделать коммит pycharm

  • автор:

Использование Git в IDE PyCharm без CLI

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

Все мы знаем о преимуществах использования систем контроля версий как при самостоятельной разработке, так и при работе в команде. Сегодня я хотел бы рассказать о поддержке в PyCharm самой популярной системы контроля версий Git и ее GUI.

Для начала предлагаю убедиться, что на машине установлен сам Git. В MS Windows это можно сделать открыв командную строку и набрав в ней git —version.

Если вдруг cmd не понимает такой команды, значит Git не установлен. Так как он является свободно распространяемым ПО, его можно бесплатно скачать и установить. Версия для MS Windows доступна по ссылке https://gitforwindows.org.

Теперь запускаем PyCharm и открываем какой-либо свой проект. С помощью команд главного меню VCS -> Enable Version Control Integration… -> [в выпадающем списке] Git подключаем контроль версий.

Сразу же не забываем создать .gitignore, чтобы не таскать конфигурационные, сборочные файлы и т.п.

Также нужно добавить конкретные файлы/директории, для которых Git будет отслеживать изменения. Изначально, после подключения контроля версий к проекту, все файлы выделятся красным цветом. Выделив необходимые из них и вызвав контекстное меню, кликаем Git -> Add. Файлы выделятся зеленым цветом – значит будут отслеживаться системой контроля версий.

Затем нужно будет сделать первый commit (Git -> Commit Files…), чтобы сохранить текущее состояние, к которому можно будет впоследствии откатиться с помощью rollback, если что-то пойдет не так.

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

Использование в разработке системы контроля версий, дает ряд неоспоримых преимуществ.

В любой момент времени есть возможность посмотреть всю хронологию произведенных над файлом изменений с помощью (Git -> Show History). Удобно видеть кто, когда и что именно добавил в проект.

При необходимости всегда можно посмотреть изменения более детально (Git -> Show Diff).

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

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

Давайте рассмотрим, как запушить свой проект, например, на github (Git -> GitHub -> Share Project on GitHub). При использовании этой функции впервые, IDE попросит авторизоваться на GitHub.

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

Пушить commit-ы в удаленный репозиторий можно с помощью Git -> Push, либо при создании commit-а выбрать не commit, как раньше, а commit and push…, тогда создастся локальный commit и запушится в удаленный репозиторий.

Обновлять проект с учетом изменений в удаленном репозитории можно с помощью Git -> Update Project.

Я рассмотрел основные операции, связанные с контролем версий, которыми пользуются разработчики, Data Scientist-ы, аналитики, инженеры и все, кто работает над проектами несколько более сложными чем “Hello World!”. Хотелось бы обратить внимание на то, что мне ни разу не пришлось прибегать к CLI и терминалу. Все базовые задачи удалось решить с помощью графического интерфейса IDE. В данном посте я попытался показать преимущества использования GUI, но, несомненно, работа через терминал имеет также свои плюсы и каждый волен выбирать то, что ближе ему.

Ультимативный гайд по Git & GitHub(PyCharm/Terminal)

Привет! Недавно я загорелся идеей изучить одну из систем контроля версий. Лишним точно не будет, к тому же я мог бы заливать открытый код своих проектов в репозиторий для общего доступа (и публикации в Кодим Крипту ) — выбор пал на Git и GitHub, как Веб-сервис, основанный на Git.

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

Что ж, посидев несколько дней и наконец поняв, как все работает, я, в партнерстве со вторым админом канала решил написать ультимативный гайд по Git & GitHub, тем самым сэкономить вам кучу сил, времени и нервов.

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

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

Первая Глава — Заядлый
Вторая Глава — Глеб
Авторы канала — Кодим крипту

Это наверное первый действительно всеобъемлющий гайд по Git & GitHub, который сможет понять даже твоя бабушка, Поехали!

Как читать эту статью?

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

В остальном же, старайтесь не просто «пробегаться» по статье, а пытаться реализовать ту или иную механику на своем собственном проекте, именно так вы вынесете максимальный impact для себя из этой статьи.

Внимательно будешь читать статью — найдешь тикет на 10 проходок в наш чатик:)

7.6 Инструменты Git — Перезапись истории

Неоднократно при работе с Git, вам может потребоваться по какой-то причине внести исправления в историю коммитов. Одно из преимуществ Git заключается в том, что он позволяет вам отложить принятие решений на самый последний момент. Область индексирования позволяет вам решить, какие файлы попадут в коммит непосредственно перед его выполнением; благодаря команде git stash вы можете решить, что не хотите продолжать работу над какими-то изменениями; также можете внести изменения в сделанные коммиты так, чтобы они выглядели как будто они произошли по-другому. В частности, можно изменить порядок коммитов, сообщения или изменённые в коммитах файлы, объединить вместе или разбить на части, полностью удалить коммит — но только до того, как вы поделитесь своими наработками с другими.

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

Примечание
Не отправляйте свои наработки, пока вы ими не довольны

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

Изменение последнего коммита

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

Если вы хотите изменить только сообщение вашего последнего коммита, это очень просто:

$ git commit --amend

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

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

Вы должны быть осторожными, используя этот приём, так как при этом изменяется SHA-1 коммита. Поэтому, как и с операцией rebase — не изменяйте ваш последний коммит, если вы уже отправили его в общий репозиторий.

Изменённый коммит может потребовать изменения сообщения коммита

При изменении коммита существует возможность изменить как его содержимое, так и сообщение коммита. Если в коммит внесены существенные изменения, то почти наверняка следует обновить и его сообщение, чтобы оно более точно отражало содержимое коммита.

С другой стороны, если изменения незначительны (исправление опечаток, добавление в коммит забытого файла), то текущее сообщение вполне можно оставить; чтобы лишний раз не вызывать редактор, просто добавьте изменённые файлы в индекс и выполните команду:

$ git commit --amend --no-edit

Изменение сообщений нескольких коммитов

Для изменения коммита, расположенного раньше в вашей истории, вам нужно обратиться к более сложным инструментам. В Git отсутствуют инструменты для переписывания истории, но вы можете использовать команду rebase , чтобы перебазировать группу коммитов туда же на HEAD, где они были изначально, вместо перемещения их в другое место. С помощью интерактивного режима команды rebase , вы можете останавливаться после каждого нужного вам коммита и изменять сообщения, добавлять файлы или делать что-то другое, что вам нужно. Вы можете запустить rebase в интерактивном режиме, добавив опцию -i к git rebase . Вы должны указать, какие коммиты вы хотите изменить, передав команде коммит, на который нужно выполнить перебазирование.

Например, если вы хотите изменить сообщения последних трёх коммитов, или сообщение какого-то одного коммита этой группы, то передайте как аргумент команде git rebase -i родителя последнего коммита, который вы хотите изменить — HEAD~2^ или HEAD~3 . Может быть, проще будет запомнить ~3 , так как вы хотите изменить последние три коммита; но не забывайте, что вы, в действительности, указываете четвертый коммит с конца — родителя последнего коммита, который вы хотите изменить:

$ git rebase -i HEAD~3

Напомним, что это команда перебазирования — каждый коммит, входящий в диапазон HEAD~3..HEAD , будет изменён вне зависимости от того, изменили вы сообщение или нет. Не включайте в такой диапазон коммит, который уже был отправлен на центральный сервер: сделав это, вы можете запутать других разработчиков, предоставив вторую версию одних и тех же изменений.

Выполнение этой команды отобразит в вашем текстовом редакторе список коммитов, в нашем случае, например, следующее:

pick f7f3f6d Change my name a bit pick 310154e Update README formatting and add blame pick a5f4a0d Add cat-file # Rebase 710f0f8..a5f4a0d onto 710f0f8 # # 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 # b, break = stop here (continue rebase later with 'git rebase --continue') # d, drop = remove commit # l, label = label current HEAD with a name # t, reset = reset HEAD to a label # m, merge [-C | -c ] [# ] # . create a merge commit using the original merge commit's # . message (or the oneline, if no original merge commit was # . specified). Use -c to reword the commit message. # # 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

Важно отметить, что коммиты перечислены в порядке, противоположном порядку, который вы обычно видите при использовании команды log . Если вы выполните log , то увидите следующее:

$ git log --pretty=format:"%h %s" HEAD~3..HEAD a5f4a0d Add cat-file 310154e Update README formatting and add blame f7f3f6d Change my name a bit

Обратите внимание на обратный порядок. Команда rebase в интерактивном режиме предоставит вам скрипт, который она будет выполнять. Она начнет с коммита, который вы указали в командной строке ( HEAD~3 ) и повторит изменения, внесённые каждым из коммитов, сверху вниз. Наверху отображается самый старый коммит, а не самый новый, потому что он будет повторен первым.

Вам необходимо изменить скрипт так, чтобы он остановился на коммите, который вы хотите изменить. Для этого измените слово pick на слово edit напротив каждого из коммитов, после которых скрипт должен остановиться. Например, для изменения сообщения только третьего коммита, измените файл следующим образом:

edit f7f3f6d Change my name a bit pick 310154e Update README formatting and add blame pick a5f4a0d Add cat-file

Когда вы сохраните сообщение и выйдете из редактора, Git переместит вас к самому раннему коммиту из списка и вернёт вас в командную строку со следующим сообщением:

$ git rebase -i HEAD~3 Stopped at f7f3f6d. Change my name a bit You can amend the commit now, with git commit --amend Once you're satisfied with your changes, run git rebase --continue

Эти инструкции говорят вам в точности то, что нужно сделать. Выполните:

$ git commit --amend

Измените сообщение коммита и выйдите из редактора. Затем выполните:

$ git rebase --continue

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

Упорядочивание коммитов

Вы также можете использовать интерактивное перебазирование для изменения порядка или полного удаления коммитов. Если вы хотите удалить коммит «Add cat-file» и изменить порядок, в котором были внесены два оставшихся, то вы можете изменить скрипт перебазирования с такого:

pick f7f3f6d Change my name a bit pick 310154e Update README formatting and add blame pick a5f4a0d Add cat-file
pick 310154e Update README formatting and add blame pick f7f3f6d Change my name a bit

Когда вы сохраните скрипт и выйдете из редактора, Git переместит вашу ветку на родителя этих коммитов, применит 310154e , затем f7f3f6d и после этого остановится. Вы, фактически, изменили порядок этих коммитов и полностью удалили коммит «Add cat-file».

Объединение коммитов

С помощью интерактивного режима команды rebase также можно объединить несколько коммитов в один. Git добавляет полезные инструкции в сообщение скрипта перебазирования:

# # 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 # b, break = stop here (continue rebase later with 'git rebase --continue') # d, drop = remove commit # l, label = label current HEAD with a name # t, reset = reset HEAD to a label # m, merge [-C | -c ] [# ] # . create a merge commit using the original merge commit's # . message (or the oneline, if no original merge commit was # . specified). Use -c to reword the commit message. # # 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» или «edit» вы укажете «squash», Git применит изменения из текущего и предыдущего коммитов и предложит вам объединить их сообщения. Таким образом, если вы хотите из этих трёх коммитов сделать один, вы должны изменить скрипт следующим образом:

pick f7f3f6d Change my name a bit squash 310154e Update README formatting and add blame squash a5f4a0d Add cat-file

Когда вы сохраните скрипт и выйдете из редактора, Git применит изменения всех трёх коммитов и затем вернёт вас обратно в редактор, чтобы вы могли объединить сообщения коммитов:

# This is a combination of 3 commits. # The first commit's message is: Change my name a bit # This is the 2nd commit message: Update README formatting and add blame # This is the 3rd commit message: Add cat-file

После сохранения сообщения, вы получите один коммит, содержащий изменения всех трёх коммитов, существовавших ранее.

Разбиение коммита

Разбиение коммита отменяет его и позволяет затем по частям индексировать и фиксировать изменения, создавая таким образом столько коммитов, сколько вам нужно. Например, предположим, что вы хотите разбить средний коммит на два. Вместо одного коммита «Update README formatting and add blame» вы хотите получить два разных: первый — «Update README formatting», и второй — «Add blame». Вы можете добиться этого, изменив в скрипте rebase -i инструкцию для разбиваемого коммита на «edit»:

pick f7f3f6d Change my name a bit edit 310154e Update README formatting and add blame pick a5f4a0d Add cat-file

Затем, когда скрипт вернёт вас в командную строку, вам нужно будет отменить индексацию изменений этого коммита, и создать несколько коммитов на основе этих изменений. Когда вы сохраните скрипт и выйдете из редактора, Git переместится на родителя первого коммита в вашем списке, применит первый коммит ( f7f3f6d ), применит второй ( 310154e ), и вернёт вас в консоль. Здесь вы можете отменить коммит с помощью команды git reset HEAD^ , которая, фактически, отменит этот коммит и удалит из индекса изменённые файлы. Теперь вы можете добавлять в индекс и фиксировать файлы, пока не создадите требуемые коммиты, а после этого выполнить команду git rebase —continue :

$ git reset HEAD^ $ git add README $ git commit -m 'Update README formatting' $ git add lib/simplegit.rb $ git commit -m 'Add blame' $ git rebase --continue

Git применит последний коммит ( a5f4a0d ) из скрипта, и ваша история примет следующий вид:

$ git log -4 --pretty=format:"%h %s" 1c002dd Add cat-file 9b29157 Add blame 35cfb2b Update README formatting f7f3f6d Change my name a bit

И снова, при этом изменились SHA-1 хеши всех коммитов в вашем списке, поэтому убедитесь, что ни один коммит из этого списка ранее не был отправлен в общий репозиторий. Обратите внимание, что последний коммит в списке ( f7f3f6d ) не изменился. Несмотря на то, что коммит был в списке перебазирования, он был отмечен как «pick» и применён до применения перебазирования, поэтому Git оставил его нетронутым.

Удаление коммита

Если вы хотите избавиться от какого-либо коммита, то удалить его можно во время интерактивного перебазирования rebase -i . Напишите слово «drop» перед коммитом, который хотите удалить, или просто удалите его из списка:

pick 461cb2a This commit is OK drop 5aecc10 This commit is broken

Из-за того, как Git создаёт объекты коммитов, удаление или изменение коммита влечёт за собой перезапись всех последующих коммитов. Чем дальше вы вернётесь в историю ваших коммитов, тем больше коммитов потребуется переделать. Это может вызвать множество конфликтов слияния, особенно если у вас много последующих коммитов, которые зависят от удалённого.

Если во время подобного перебазирования вы поняли, что это была не очень хорошая идея, то всегда можно остановиться. Просто выполните команду git rebase —abort и ваш репозиторий вернётся в то состояние, в котором он был до начала перебазирования.

Если вы завершили перебазирование, а затем решили, что полученный результат это не то, что вам нужно — воспользуйтесь командой git reflog , чтобы восстановить предыдущую версию вашей ветки. Дополнительную информацию по команде reflog можно найти в разделе Восстановление данных главы 10.

Примечание

Дрю Дево создал практическое руководство с упражнениями по использованию git rebase . Найти его можно здесь: https://git-rebase.io/

Продвинутый инструмент: filter-branch

Существует ещё один способ переписывания истории, который вы можете использовать при необходимости изменить большое количество коммитов каким-то программируемым способом — например, изменить глобально ваш адрес электронной почты или удалить файл из всех коммитов. Для этого существует команда filter-branch , и она может изменять большие периоды вашей истории, поэтому вы, возможно, не должны её использовать кроме тех случаев, когда ваш проект ещё не стал публичным и другие люди ещё не имеют наработок, основанных на коммитах, которые вы собираетесь изменить. Однако, эта команда может быть очень полезной. Далее вы ознакомитесь с несколькими обычными вариантами использованиями этой команды, таким образом, вы сможете получить представление о том, на что она способна.

Команда git filter-branch таит в себе много подводных камней и более не является рекомендуемым способом изменения истории. Вместо этого, рассмотрите возможность использования Python скрипта git-filter-repo , который лучше подходит для большинства ситуаций, в которых вы обычно используете filter-branch . С документаций и исходным кодом скрипта можно ознакомиться здесь: https://github.com/newren/git-filter-repo.

Удаление файла из каждого коммита

Такое случается довольно часто. Кто-нибудь случайно зафиксировал огромный бинарный файл, неосмотрительно выполнив git add . , и вы хотите отовсюду его удалить. Возможно, вы случайно зафиксировали файл, содержащий пароль, а теперь хотите сделать ваш проект общедоступным. В общем, утилиту filter-branch вы, вероятно, захотите использовать, чтобы привести к нужному виду всю вашу историю. Для удаления файла passwords.txt из всей вашей истории вы можете использовать опцию —tree-filter команды filter-branch :

$ git filter-branch --tree-filter 'rm -f passwords.txt' HEAD Rewrite 6b9b3cf04e7c5686a9cb838c3f36a8cb6a0fc2bd (21/21) Ref 'refs/heads/master' was rewritten

Опция —tree-filter выполняет указанную команду после переключения на каждый коммит и затем повторно фиксирует результаты. В данном примере, вы удаляете файл passwords.txt из каждого снимка вне зависимости от того, существует он или нет. Если вы хотите удалить все случайно зафиксированные резервные копии файлов, созданные текстовым редактором, то вы можете выполнить нечто подобное git filter-branch —tree-filter ‘rm -f *~’ HEAD .

Вы можете посмотреть, как Git изменит деревья и коммиты, а затем уже переместить указатель ветки. Как правило, хорошим подходом будет выполнение всех этих действий в тестовой ветке и, после проверки полученных результатов, установка на неё указателя основной ветки. Для выполнения filter-branch на всех ваших ветках, вы можете передать команде опцию —all .

Установка подкаталога как корневого каталога проекта

Предположим, вы выполнили импорт из другой системы контроля версий и получили в результате подкаталоги, которые не имеют никакого смысла ( trunk , tags и так далее). Если вы хотите сделать подкаталог trunk корневым для каждого коммита, команда filter-branch может помочь вам в этом:

$ git filter-branch --subdirectory-filter trunk HEAD Rewrite 856f0bf61e41a27326cdae8f09fe708d679f596f (12/12) Ref 'refs/heads/master' was rewritten

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

Глобальное изменение адреса электронной почты

Ещё один типичный случай возникает, когда вы забыли выполнить git config для настройки своего имени и адреса электронной почты перед началом работы, или, возможно, хотите открыть исходные коды вашего рабочего проекта и изменить везде адрес вашей рабочей электронной почты на персональный. В любом случае вы можете изменить адрес электронный почты сразу в нескольких коммитах с помощью команды filter-branch . Вы должны быть осторожны, чтобы изменить только свои адреса электронной почты, для этого используйте опцию —commit-filter :

$ git filter-branch --commit-filter ' if [ "$GIT_AUTHOR_EMAIL" = "schacon@localhost" ]; then GIT_AUTHOR_NAME="Scott Chacon"; GIT_AUTHOR_EMAIL="schacon@example.com"; git commit-tree "$@"; else git commit-tree "$@"; fi' HEAD

Эта команда пройдёт по всем коммитам и установит в них ваш новый адрес. Так как коммиты содержат значения SHA-1-хешей их родителей, эта команда изменяет хеш SHA-1 каждого коммита в вашей истории, а не только тех, которые соответствовали адресам электронной почты.

Using PyCharm with Git

Image of Using PyCharm with Git

PyCharm is an IDE (Integrated Development Environment) built for Python that supports the Git version control system (VCS). Using Pycharm, you can set up your project to use Git and GitHub so it’s easier to manage changes on both the local machine and remote server

In this article, we’ll discuss how to get started using Git integration for a new or existing PyCharm project.

Getting PyCharm

In this tutorial, we are using the PyCharm Community Edition. You can go to the download page for PyCharm Community or you can get the Toolbox App if you want to manage more than one of JetBrains’ IDEs. I suggest the Toolbox App as it simplifies updates and manages the other versions of IntelliJ.

Setting up PyCharm for Git

Recent editions of JetBrains’ IDE have included Git integration, so we do not need to install anything. We just need to enable the integration.

Enable Version Control Integration

Go to the top file menu, click on VCS > Enable Version Control Integration:

PyCharm Git Enable Version Control Integration

A dialog will appear. Select Git > OK:

PyCharm Git Select Git OK

A new local git repository is automatically created. Now you can start adding files.

Adding files to the repository

If you started a default project, you will have a main.py file under that project for now. Initially, it is colored red which means it has not been added to version control:

PyCharm Git Red Not Added to Version Control

The red color means it has not been added to source control. Let’s do that now.

Right-click on main.py, go to Git > Add (or use the shortcut: Ctrl+Alt+A in Windows, Cmd+Alt+A on Mac):

PyCharm Git Add

Alternatively, you can add all files in a directory.

Right-click on the top-level directory (or the directory of your choosing) and go to Git > Add. It’s the same as adding a single file.

Once you have added the file or directory, you will see the file names changed from red to green:

PyCharm Git Green Added to Version Control

Committing changes to the repository

Now that we have our project set up with Git, we can start making changes to our files and committing them to the repository. To do this, we’ll use the Commit Changes dialog.

To open the Commit Changes dialog, go to VCS > Git > Commit. or press Ctrl+K (Cmd+K on Mac).

This will open the Commit Changes Dialog, which is split into two panes. The top pane shows a list of files changed since the last commit and their status (unchanged, modified, or staged for committing), while the bottom pane is where you can set the commit message.

PyCharm Git Commit

If you select the gear in between the two panes you will see it has several options used to configure how your next commit should work. For example, choose which files you want to include in your next commit and whether or not you would like PyCharm to add new filenames as untracked (i.e., ignored) by default when using Git commands in the future. Using these options we can make a range of commits with different changes included each time:

PyCharm Git Commit Configuration

Once you have your settings the way you want them and the commit message as descriptive as you need then you commit. To commit your changes, simply click the Commit button in the bottom right corner. If the commit is successful, you will set a green message connected to the Git tab located at the bottom of the screen:

PyCharm Git Commit Message

Once your changes are committed to the repository their color in the project dialog will change to the standard color you have set up in the IDE (I have dark mode enabled, so it’s white for me).

When you start editing an already committed file, the file will turn green again, meaning there are changes in it that need committing.

Pushing your changes to GitHub from within PyCharm

In order to push your changes to GitHub from PyCharm, we need to add the GitHub server as a remote to your local copy of a project.

You can do this by going to:

Git > GitHub > Share Project on GitHub

PyCharm Git Share Project on GitHub

This will popup a dialog titled «Share Project on GitHub»:

PyCharm Git Share Project on GitHub

If you have not added your GitHub account details to PyCharm yet click on Add Account. Then select the method you want to use to log in to GitHub. Either selection is valid, but the token route allows you a little more control over what access is granted to the IDE and you can terminate access without changing your password:

PyCharm Git Log In via GitHub

When you are done connecting, you will see your username in Share by dropdown:

PyCharm Git Username

Now all you need to do is simply click on Share.

Once that is done, you can navigate to your repositories on GitHub and see the new repo:

PyCharm Git GitHub New Repo

Now your repository is available to anyone who has access to the repository. You can also see a history of all the changes that have been made to the project by looking at the GitHub repository.

Pulling down remote changes from GitHub into your local copy of a project in Pycharm

In order to pull changes made in GitHub, say from another developer merging a branch or someone editing a file directly, and you have already made sure the remote has been set up, then you can simply press a button in PyCharm to do so.

Go to the menu: Git > Pull

A dialog will appear with «Pull to Master» as the title:

PyCharm Git Pull to Master

Click the «Pull» button.

PyCharm will then pull down all of the changes from that repository into your local project. If you have any conflicts, it will tell you and allow you to merge them manually. You can also view a log of the changes that were pulled down by going to Git > Show Git Log:

PyCharm Git Log

Summary

Wrapping up, in this post we looked at how to use PyCharm with Git. We covered the basics of committing and pushing changes, as well as pulling down remote changes from GitHub into your local project.

Next Steps

If you’re interested in learning more about how Git works under the hood, check out our Baby Git Guidebook for Developers, which dives into Git’s code in an accessible way. We wrote it for curious developers to learn how Git works at the code level. To do this we documented the first version of Git’s code and discuss it in detail.

We hope you enjoyed this post! Feel free to shoot me an email at jacob@initialcommit.io with any questions or comments.

About the Author

Steven Lohrenz is a 25+ year IT professional where they have been a programmer, software engineer, technical team lead, and software and integrations architect. They blog at StevenLohrenz.com about things that interest them. You can find their recommendations for laptops for programmers there also.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *