Git: Прервать слияние
Последнее обновление
Если git merge наталкивается на конфликты и вы предпочитаете отступить, а не решать их, git merge --abort отменяет слияние и восстанавливает вашу ветку ровно в том состоянии, в котором она была до начала. Это чистый аварийный выход из слияния, которое пошло не так.
Уже завершённое слияние отменяется иначе - см. ниже. Попробуйте эти команды в терминальном playground - реальной оболочке в вашем браузере.
Синтаксис
| Command | What it does |
|---|---|
git merge --abort | Отменяет слияние с конфликтами и восстанавливает состояние до слияния |
git reset --merge | Более старый эквивалент - прерывает и сбрасывает слияние |
git merge --quit | Выходит из слияния, но оставляет рабочее дерево как есть |
Отмена уже завершённого слияния
Отличается от прерывания - коммит слияния уже существует.
| Situation | Command |
|---|---|
| Слияние локальное, не отправлено | git reset --hard ORIG_HEAD |
| Слияние уже отправлено | git revert -m 1 <merge-hash> |
Часто задаваемые вопросы о прерывании слияния в Git
Как отменить выполняющееся слияние?
Выполните
git merge --abort. Если слияние остановилось из-за конфликтов и вы не хотите их решать, эта команда отменяет всю операцию и возвращает вашу ветку и рабочее дерево ровно в то состояние, в котором они были до начала слияния.В чём разница между git merge --abort и git reset --merge?
По сути они выполняют одну и ту же задачу - отменяют выполняющееся слияние и восстанавливают состояние до слияния.
git merge --abort - современная, специально предназначенная для этого команда; git reset --merge - более старый способ, который всё ещё работает. Для ясности предпочитайте git merge --abort.Как отменить уже завершённое слияние?
Это не прерывание, поскольку коммит слияния уже существует. Если слияние только локальное,
git reset --hard ORIG_HEAD возвращает ветку туда, где она была до слияния - это работает и после fast-forward, где HEAD~1 не сработал бы. Команда отбрасывает незакоммиченную работу, поэтому сначала проверьте git status. Если вы уже отправили слияние, используйте git revert -m 1 <merge-hash>, чтобы обратить его, не переписывая общую историю.Потеряю ли я другие изменения при прерывании слияния?
git merge --abort восстанавливает состояние непосредственно перед слиянием, поэтому изменения слияния отбрасываются, но ваша собственная закоммиченная работа остаётся нетронутой. Если перед началом слияния у вас были незакоммиченные изменения, сначала закоммитьте их или спрячьте через stash - прерывание восстанавливает состояние коммита до слияния.Могу ли я попрактиковаться в этом онлайн?
Да. Откройте терминальный playground, чтобы выполнить
git merge --abort в реальной оболочке в вашем браузере - ничего устанавливать не нужно. Бесплатный интерактивный курс по Git от Coddy также пошагово охватывает слияние и разрешение конфликтов.