Я столкнулся с похожей проблемой с ребазой. Моя проблема была вызвана тем, что один из моих коммитов изменил только файл, и при разрешении я отменил изменение, внесенное в этот коммит. Я смог решить мою проблему, пропустив соответствующий коммит (git rebase --skip
).
Вы можете воспроизвести эту проблему в тестовом хранилище. Сначала создайте хранилище.
$ mkdir failing-merge
$ cd failing-merge
$ git init
Initialized empty Git repository in $HOME/failing-merge/.git/
Затем зафиксируйте оригинальное содержимое version.txt
в master.
$ echo v1.4-alpha-02 > version.txt
$ git add version.txt
$ git commit -m initial
[master (root-commit) 2eef0a5] initial
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 version.txt
Создайте ветку v4
и измените содержимое version.txt
.
$ git checkout -b v4
Switched to a new branch 'v4'
$ echo v1.4-alpha-03 > version.txt
$ git add version.txt
$ git commit -m v4
[v4 1ef8c9b] v4
1 files changed, 1 insertions(+), 1 deletions(-)
Вернитесь к master
и измените содержимое version.txt
, чтобы во время ребазирования произошел конфликт.
$ git checkout master
Switched to branch 'master'
$ echo v1.4-alpha-04 > version.txt
$ git add version.txt
$ git commit -m master
[master 7313eb3] master
1 files changed, 1 insertions(+), 1 deletions(-)
Вернитесь в ветку v4
и попробуйте выполнить перезагрузку. Это терпит неудачу с конфликтом в version.txt
, как и планировалось.
$ git checkout v4
Switched to branch 'v4'
$ git rebase master
First, rewinding head to replay your work on top of it...
Applying: v4
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Auto-merging version.txt
CONFLICT (content): Merge conflict in version.txt
Recorded preimage for 'version.txt'
Failed to merge in the changes.
Patch failed at 0001 v4
When you have resolved this problem run "git rebase --continue".
If you would prefer to skip this patch, instead run "git rebase --skip".
To restore the original branch and stop rebasing run "git rebase --abort".
$ cat version.txt
<<<<<<< HEAD
v1.4-alpha-04
=======
v1.4-alpha-03
>>>>>>> v4
Мы разрешаем конфликт, выбрав master
содержимое version.txt
. Мы добавляем файл и пытаемся продолжить нашу перебазировку.
$ echo v1.4-alpha-04 > version.txt
$ git add version.txt
$ git rebase --continue
Applying: v4
No changes - did you forget to use 'git add'?
If there is nothing left to stage, chances are that something else
already introduced the same changes; you might want to skip this patch.
When you have resolved this problem run "git rebase --continue".
If you would prefer to skip this patch, instead run "git rebase --skip".
To restore the original branch and stop rebasing run "git rebase --abort".
Не удалось! Давайте посмотрим, какие изменения git
думают в нашем хранилище.
$ git status
# Not currently on any branch.
nothing to commit (working directory clean)
Ах, ах, нет изменений. Если вы подробно прочитали предыдущее сообщение об ошибке, git
сообщит нам об этом и порекомендует использовать git rebase --skip
. Он сказал нам: «Если на сцене ничего не осталось, есть вероятность, что что-то еще уже внесло такие же изменения; возможно, вы захотите пропустить этот патч». Поэтому мы просто пропускаем коммит, и перебазирование завершается успешно.
$ git rebase --skip
HEAD is now at 7313eb3 master
Предостережение : Обратите внимание, что git rebase --skip
полностью удалит коммит, который git
попытался перебазировать. В нашем случае это должно быть хорошо, поскольку git
жалуется, что это пустой коммит. Если вы думаете, что потеряли изменения после завершения перебазирования, вы можете использовать git reflog
, чтобы получить идентификатор фиксации вашего хранилища перед перебазированием, и использовать git reset --hard
, чтобы вернуть хранилище в это состояние (это еще один разрушительный операция).