Bash Linux + Git: от новичка до уверенного пользователяРабота с ветками и управление историейВетвление и слияние

Ветвление и слияние

Уроки курсаВетвление и слияние

Давайте посмотрим на следующий скрипт, который  подготавливает наш репозиторий к мердж-конфликту.

#!/usr/bin/env bash
set -e

# 1. Инициализируем новый репозиторий
git init conflict-demo
cd conflict-demo

# 2. Делает первый коммит с базовой версией greet.js
cat > greet.js << 'EOF'
function greet() {
    console.log("Hello, world!");
}
EOF
git add greet.js
git commit -m "Add initial greet.js"

# 3. Создаём feature-branch и меняем реализацию
git checkout -b feature-branch
cat > greet.js << 'EOF'
function greet(name) {
    console.log(\`Hello, \${name}!\`);
}
EOF
git add greet.js
git commit -m "Feature: make greet accept a name"

# 4. Возвращаемся на master и вносим другое изменение в ту же строку
git checkout master
cat > greet.js << 'EOF'
function greet() {
    console.log("Hi there!");
}
EOF
git add greet.js
git commit -m "Master: change greeting text to informal"

После чего в репозитории выполним git merge feature-branch и увидим следующую картину

Осталось принять текущее или входящее изменение (или написать что нибудь свое, что тоже вариант). По факту нам нужно просто изменить greet.js произвольным образом, VSCode в данном случае лишь предлагает наиболее популярные варианты. 

После чего сделав git add greet.js и git commit мы совершим необходимый merge реквест. (Победа)

Здесь мы рассмотрели лишь один из типов конфликта, на самом деле их довольно много, однако решаются все однотипно.