Упрощенный слияние в Git: слияние веток как профессионал

Слияние веток в Git иногда может быть сложной задачей, но команда git merge значительно упрощает этот процесс. В этом руководстве вы узнаете основы объединения веток с использованием git merge, в паре с GitHub, ведущим инструментом управления проектами.

Давайте начнем это путешествие в мир Git и GitHub, с акцентом на мощную команду git merge.

Предварительные условия для освоения слияния в Git

Прежде чем погружаться в тонкости git merge, убедитесь, что у вас есть следующая настройка:

  • Git (версия 2.25.1, использованная в этом руководстве) – Скачайте с официального сайта Git.
  • A GitHub account – Sign up at GitHub.
  • Машина с Ubuntu (здесь используется Ubuntu 20.04, но подойдет любая операционная система с установленным Git).

Инициализация проекта для слияния в Git

Чтобы эффективно использовать git merge, вам сначала нужен проект Git. Давайте создадим демонстрационный проект для практики.

1. Начните с создания нового каталога с именем ~/git-demo и перейдите в него:

mkdir git-demo && cd git-demo

2. Создайте файл index.html в каталоге ~/git-demo со следующим содержимым. Этот базовый HTML-файл отображает сообщение о начале работы с git merge.

<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Git Merge Demo</title>
</head>
<body>
    <h4>Let's get started with git merge</h4>
</body>
</html>

3. Инициализируйте новый репозиторий Git в вашем проектном каталоге:

Команда git init используется для преобразования существующего проекта без версионирования в репозиторий Git или для начала нового проекта с использованием Git.

git init
Initializing a Git repository for git merge

4. Подтвердите создание папки .git в вашем проектном каталоге. Эта папка – место, где Git отслеживает изменения:

ls -la
Verifying the existence of the GIT repository in the directory.

5. Примените команду git add, чтобы подготовить ваши изменения в проекте. Стадированием файла index.html вы готовите его к следующему коммиту в рабочем процессе Git.

git add index.html

6. Используйте git status, чтобы подтвердить, что ваш файл правильно стадирован. Эта команда предоставляет снимок текущего состояния вашего рабочего каталога.

git status
Confirming the staging of changes for git merge.

7. Затем зафиксируйте ваши изменения с помощью git commit. Эта команда сохраняет ваши стадийные изменения в локальном репозитории, отмечая значительный шаг в вашей истории версий.

git commit -m "initial commit"
Executing the initial commit in preparation for git merge.

Установите свою идентичность Git с помощью: git config --global user.email "[email protected]" и git config --global user.name "Your Name", если вы используете Git впервые.

8. Проверьте ваш журнал коммитов с помощью git log. Эта команда помогает вам отслеживать изменения и является важной при подготовке к git merge.

git log
Checking commit history before performing git merge.

9. Подтвердите наличие веток в вашем репозитории с помощью git branch. Этот шаг критичен перед выполнением git merge.

Примечание: В последних версиях Git, имя основной ветки – ‘main’, заменяя ‘master’.

git branch
Listing all branches in preparation for git merge.

Создание ветки для слияния в Git

С вашей первоначальной настройкой Git завершена и сделан первый коммит, пришло время создать новую ветку. Эта ветка будет использоваться для демонстрации процесса git merge эффективно.

1. Обновите файл index.html новым содержимым, чтобы продемонстрировать изменения в вашей ветке. Эта версия включает поля для ввода пользователем, готовясь к демонстрации git merge.

<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Git Merge Demo</title>
</head>
<body>
    <h4>Enhancing Git Merge Skills</h4>
    <form action="">
      <input type="text" name="username" placeholder="Username" />
      <input type="password" name="password" placeholder="Password" />
    </form>
</body>
</html>

2. Проверьте состояние вашего репозитория с помощью git status, чтобы просмотреть изменения в index.html. Он должен указать, что файл изменен и не добавлен в коммит, готовый для следующих шагов в процессе git merge.

Inspecting repository changes for git merge.

3. Создайте новую ветку с именем “form” с помощью git checkout -b form. Эта команда не только создает новую ветку, но и переключает вашу рабочую ветку на “form”, что является важным для реализации git merge.

git checkout -b form
Creating a new branch for git merge.

4. Подтвердите создание новой ветки, запустив git branch. Теперь вы должны видеть обе ветки “form” и “master”, с “form” в качестве активной ветки, указанной звездочкой (*).

git branch
Confirming the active ‘form’ branch for git merge.

5. Добавьте в stage и закоммитьте ваши изменения в ветке form. Это действие гарантирует, что ветка form отражает последние обновления, сделанные в файле index.html, создавая основу для эффективного git merge.

## Отправьте обновленный файл
git add index.html

## Зафиксируйте новые изменения
git commit -m "Added user input fields to form"
Committing updated index.html to the ‘form’ branch for git merge.

Слияние Локальной Ветки с Git Merge

Теперь, когда у вас есть отдельные ветки в вашем репозитории GitHub, следующим шагом будет их объединение. Этот раздел сосредотачивается на слиянии веток локально с помощью команды git merge, базовой операции Git.

1. Для начала слияния переключитесь на ветку master, которая будет получать обновления из ветки form:

git checkout master

2. Как только вы находитесь на ветке master, выполните git merge form, чтобы объединить изменения из ветки form в master. Этот шаг является важным в процессе git merge.

git merge form
Successfully merging branches using git merge.

3. Подтвердите слияние, убедившись, что вы находитесь на ветке master и проверив, что содержимое index.html было обновлено.

# Подтвердите текущую ветку
git branch
# Проверьте объединенное содержимое
cat index.html
Reviewing index.html content post git merge.

Оптимизация с Git Squash

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

Давайте исследуем процесс сжатия, внесши дополнительные изменения в файл index.html на ветке form, а затем сожмем эти изменения.

1. Вернитесь обратно к ветке form, чтобы внести дополнительные изменения:

git checkout form

2. Измените index.html, добавив заголовок формы. Этот шаг создаст изменение, которое мы затем сложим во время слияния:

<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h4>Mastering Git Merge with Form Updates</h4>
    <form action="">
      <h4>Account Details</h4>
      <input type="text" name="username" placeholder="Username" />
      <input type="password" name="password" placeholder="Password" />
      <button>Submit</button>
    </form>
</body>
</html>

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

git add index.html
git commit -m "Enhanced form with a header for git merge"
Staging and committing changes for squashing in git merge.

4. Улучшите index.html в ветке form, добавив новое поле ввода. Эта модификация является частью подготовки к эффективному git merge.

<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Git Merge Example</title>
</head>
<body>
    <h4>Practicing Git Merge</h4>
    <form action="">
      <h4>Enter account details</h4>
      <input type="text" name="fullname" placeholder="Full Name" />
      <input type="text" name="username" placeholder="Username" />
      <input type="password" name="password" placeholder="Password" />
      <button>Submit</button>
    </form>
</body>
</html>

5. Добавьте изменения в стейдж и зафиксируйте их с отдельным сообщением, гарантируя, что каждый шаг вашей работы четко документирован для предстоящего git merge.

git add index.html
git commit -m "Enhanced form with an additional input field"
Adding another input field to index.html for git merge.

6. Затем вставьте элемент параграфа под формой в index.html, дополнительно изменяя файл в предварительной подготовке к git merge.

<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Git Merge Practice</title>
</head>
<body>
    <h4>Let's get started with git merge</h4>
    <form action="">
      <h4>Enter account details</h4>
      <input type="text" name="fullname" placeholder="Full Name" />
      <input type="text" name="username" placeholder="Username" />
      <input type="password" name="password" placeholder="Password" />
      <button>Submit</button>
    </form>
    <p>Already a user?</p>
</body>
</html>

7. Снова добавьте изменения в стейдж и зафиксируйте их, используя сообщение, которое отражает суть этого обновления, важного для процесса git merge.

git add index.html
git commit -m "Added user status paragraph to form"
Further modifying index.html for git merge.

8. Используйте git rebase в интерактивном режиме, чтобы просмотреть и отредактировать ваши последние коммиты. Этот шаг является неотъемлемым в процессе сглаживания коммитов для чистого git merge.

git rebase -i HEAD~3

9. В интерактивном режиме выберите reword для первого коммита и squash для последующих. Это действие объединяет вашу историю коммитов, делая ваш git merge более чистым и организованным.

Preparing commits for squashing in git merge.

10. После переформулирования и сохранения обновите объединенное сообщение коммита, отражая кумулятивные изменения. Этот шаг завершает процесс сглаживания, готовя вас к упрощенному git merge.

Finalizing the commit message for git merge.

Подтвердите успешность вашей операции сжатия, которая является неотъемлемой частью процесса git merge при обработке нескольких сообщений о фиксации.

Successful git squash operation.

Для одновременного сжатия и слияния используйте git merge --squash. Эта техника объединяет и сжимает ветку form в ветку master, эффективно объединяя коммиты.

git merge --squash form

Выполнение команды git merge --squash объединяет изменения из ветки form в ветку master, сжимая все коммиты в один. Этот подход является частью эффективных стратегий git merge.

Executing git merge with squash option.

Внедрение Fast-Forward в Git Merge

Для упрощения истории коммитов fast-forwarding является идеальным методом, особенно для незначительных обновлений или исправлений ошибок. Это позволяет вам объединять ветки без дополнительных коммитов слияния, поддерживая чистую и линейную историю, что является важным для эффективных процессов git merge.

Fast-forwarding происходит, когда нет расхождения в базовой ветке, обычно master, что обеспечивает плавное интегрирование историй и обновление указателей.

1. Переключитесь на ветку form, чтобы начать процесс fast-forward:

git checkout form

2. Создайте и обновите файл JavaScript, например, index.js, в ветке form, добавьте его в stage и закоммитьте изменения:

git add index.js
git commit -m "Added JavaScript functionality"

3. Наконец, выполните слияние ветки form в master с использованием метода fast-forward. Этот шаг совместит ветку master с последними изменениями из ветки form, создавая плавный, линейный путь git merge.

git checkout master
git merge form
Performing a fast-forward merge in Git.

Заключение

Этот учебник провёл вас через различные техники объединения веток с использованием git merge. От сжатия коммитов до быстрого перемещения вперёд, эти методы улучшают вашу способность управлять проектами совместно в Git.

Теперь, обладая этими навыками, рассмотрите возможность внести вклад в совместные проекты на GitHub, применяя свои знания о git merge на практике.

Source:
https://adamtheautomator.com/git-merge/