<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Git для новичков: как не сломать проект при первом commit и push]]></title><description><![CDATA[<p dir="auto">Git - это инструмент, который помогает сохранять версии проекта и работать с командой. Многие новички на первом <strong>commit</strong> и <strong>push</strong> случайно ломают репозиторий: стирают файлы, добавляют мусор или путаются в ветках. Эта статья покажет, как сделать первые шаги правильно, шаг за шагом.</p>
<p dir="auto">Вы узнаете, как подготовить файлы, написать хорошее сообщение коммита и безопасно отправить изменения на сервер. Простые примеры и checklists помогут избежать типичных ошибок. В итоге проект останется целым, а история изменений - чистой.</p>
<h2>Готовим проект к первому коммиту</h2>
<p dir="auto">Перед тем как делать <strong>commit</strong>, нужно понять, что Git видит в твоем проекте. Представь, что репозиторий - это фотоальбом: каждый снимок (<strong>commit</strong>) фиксирует состояние файлов. Если добавить лишнее, потом сложно будет отчистить.</p>
<p dir="auto">Сначала инициализируй репозиторий командой <code>git init</code>. Это создаст скрытую папку .git, где хранится вся магия. Проверь статус: <code>git status</code> покажет, какие файлы изменились. Новички часто забывают, что Git игнорирует не добавленные файлы - они как черновики, не попавшие в финальный снимок.</p>
<p dir="auto">Теперь подумай о файле <strong>.gitignore</strong>. Это список того, что Git не должен трогать: логи, временные файлы IDE вроде .vscode/, сборки build/ или node_modules/. Без него в коммит улетит куча мусора, и репозиторий раздуется.</p>
<ul>
<li>Создай .gitignore сразу: добавь строки вроде <code>node_modules/</code>, <code>*.log</code>, <code>dist/</code>.</li>
<li>Проверь <code>git status</code> - убедись, что мусор не отображается.</li>
<li><strong>Важно</strong>: если файл уже заиндексирован, удали его из индекса <code>git rm --cached filename</code>.</li>
</ul>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Ошибка новичков</th>
<th>Почему опасно</th>
<th>Как исправить</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>git add .</code> без .gitignore</td>
<td>Добавляет node_modules (сотни МБ)</td>
<td>Создай .gitignore и <code>git reset</code>.</td>
</tr>
<tr>
<td>Забыть о временных файлах</td>
<td>История засоряется, push тормозит</td>
<td>Всегда проверяй <code>git status</code>.</td>
</tr>
<tr>
<td>Игнорировать IDE-файлы</td>
<td>Локальные настройки мешают команде</td>
<td>Добавь .vscode/, .idea/ в .gitignore.</td>
</tr>
</tbody>
</table>
<h2>Пишем коммит, который поймут все</h2>
<p dir="auto"><strong>Commit</strong> - это момент истины: ты фиксируешь изменения навсегда (или почти). Плохое сообщение - как записка без подписи: никто не поймет, что ты сделал. Хорошее - краткое, но информативное, помогает через месяцы вспомнить, зачем менял код.</p>
<p dir="auto">Стандарт: первая строка до 50 символов, в повелительном наклонении. <strong>Add</strong> вместо Added, <strong>Fix</strong> вместо Fixed. Без точки в конце. Если нужно объяснить - после пустой строки добавь детали. Это как Conventional Commits: feat: добавь новую кнопку, fix: поправь баг с формой.</p>
<p dir="auto">Пример: ты добавил index.html и style.css. Не пиши “update”. Пиши: <code>git commit -m "feat: add initial HTML structure and basic styles"</code>. Потом <code>git log --oneline</code> покажет чистую историю.</p>
<ul>
<li><code>git add filename</code> - добавь конкретный файл.</li>
<li><code>git add .</code> - осторожно, только после .gitignore.</li>
<li><code>git add -A</code> - все изменения, но рискуешь мусором.</li>
<li><em>Проверь перед commit</em>: <code>git diff --staged</code>.</li>
</ul>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Тип коммита</th>
<th>Пример</th>
<th>Когда использовать</th>
</tr>
</thead>
<tbody>
<tr>
<td>feat</td>
<td>feat: add login form</td>
<td>Новая функция.</td>
</tr>
<tr>
<td>fix</td>
<td>fix: resolve CSS overflow</td>
<td>Исправление бага.</td>
</tr>
<tr>
<td>docs</td>
<td>docs: update README</td>
<td>Документация.</td>
</tr>
<tr>
<td>refactor</td>
<td>refactor: extract utils</td>
<td>Переструктуризация без фич.</td>
</tr>
</tbody>
</table>
<h2>Безопасный push: синхронизируйся и не перезаписывай</h2>
<p dir="auto"><strong>Push</strong> отправляет твои коммиты на сервер (GitHub, GitLab). Но если там уже есть изменения, возникнет конфликт. Новички давят <code>git push --force</code> и стирают чужой код - проект в беде.</p>
<p dir="auto">Сначала подтяни свежие изменения: <code>git pull origin main</code>. Лучше с rebase: <code>git pull --rebase origin main</code>. Это накладывает твои коммиты поверх новых, история остается линейной, без merge-коммитов. Потом <code>git push origin main</code>.</p>
<p dir="auto">Если первая отправка - создай репозиторий на сервере, добавь remote: <code>git remote add origin URL</code>. Push в master или main. <em>Нюанс</em>: если ветка защищена, push отклонится - создай pull request.</p>
<ul>
<li><code>git fetch</code> - посмотри изменения без слияния.</li>
<li><code>git pull --rebase</code> - безопасное обновление.</li>
<li><code>git push origin branch</code> - укажи ветку.</li>
<li><strong>Никогда не force на main</strong>: используй только в своей feature-ветке.</li>
</ul>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Команда</th>
<th>Что делает</th>
<th>Когда применять</th>
</tr>
</thead>
<tbody>
<tr>
<td>git pull</td>
<td>Fetch + merge</td>
<td>Быстро, но грязная история.</td>
</tr>
<tr>
<td>git pull --rebase</td>
<td>Fetch + rebase</td>
<td>Чистая линейная история.</td>
</tr>
<tr>
<td>git push --force-with-lease</td>
<td>Force с проверкой</td>
<td>Только если уверен.</td>
</tr>
</tbody>
</table>
<h2>Ветки: не ломай main с первого раза</h2>
<p dir="auto">Ветка - как копия проекта для экспериментов. Main - священная, туда только готовый код. Новички коммитят прямо в main и пугают команду.</p>
<p dir="auto">Создай feature-ветку: <code>git checkout -b feature/new-button</code>. Работай там, коммить, push <code>git push origin feature/new-button</code>. Потом pull request на main. Это изолирует изменения.</p>
<p dir="auto">Если накосячил: <code>git checkout main</code>, <code>git merge feature/xxx</code> или через PR. <em>Совет</em>: перед push проверяй <code>git log --graph</code>.</p>
<ul>
<li><code>git branch</code> - список веток.</li>
<li><code>git checkout -b name</code> - новая ветка.</li>
<li><code>git switch main</code> - переключиться.</li>
</ul>
<p dir="auto"><strong>Частые ловушки с ветками</strong></p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Ловушка</th>
<th>Симптом</th>
<th>Спасение</th>
</tr>
</thead>
<tbody>
<tr>
<td>Push в main случайно</td>
<td>История замусорена</td>
<td>Создай новую ветку заранее.</td>
</tr>
<tr>
<td>Конфликт при merge</td>
<td>Файлы сломаны</td>
<td><code>git mergetool</code> или вручную.</td>
</tr>
<tr>
<td>Забыл pull перед push</td>
<td>Rejected</td>
<td><code>git pull --rebase</code>.</td>
</tr>
</tbody>
</table>
<h2>Что Git скрывает от глаз новичка</h2>
<p dir="auto">Освоил commit и push - уже круто, проект цел. Но Git полон подводных камней: rebase меняет историю, reset стирает коммиты, stash прячет изменения. Подумай, как интегрировать это в workflow.</p>
<p dir="auto">Дальше изучи aliases вроде <code>git config --global alias.st status</code> - экономит время. Или cherry-pick для выборочного копирования. Это сделает тебя увереннее в команде.</p>
]]></description><link>https://forum.exlends.com/topic/2197/git-dlya-novichkov-kak-ne-slomat-proekt-pri-pervom-commit-i-push</link><generator>RSS for Node</generator><lastBuildDate>Tue, 28 Apr 2026 13:38:16 GMT</lastBuildDate><atom:link href="https://forum.exlends.com/topic/2197.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 27 Apr 2026 10:50:07 GMT</pubDate><ttl>60</ttl></channel></rss>