git rebase - продолжает видеть конфликты, git status говорит, что их нет - PullRequest
2 голосов
/ 02 июня 2019

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

    ╰─$ git status
rebase in progress; onto 99e642b
You are currently rebasing branch 'Vince_issue_157' on '99e642b'.
  (all conflicts fixed: run "git rebase --continue")

nothing to commit, working tree clean

    ╰─$ git rebase --continue Applying: RM debugger No changes - did you forget to use git add?

Разве эти два не должны быть противоречиями?Как я могу выяснить, что git не нравится?


Быстрый вывод рефлога, если он поднимает какие-либо красные флаги

dc04ac4 (HEAD) HEAD@{0}: rebase: improve warning
f97482a HEAD@{1}: rebase: incomplete test for new warning
e73be23 HEAD@{2}: rebase: warning (that needs tweak) on default lang with no translation problem
99e642b (upstream/master, master) HEAD@{3}: rebase: checkout master
5d8b393 (origin/Vince_issue_157, Vince_issue_157) HEAD@{4}: checkout: moving from master to Vince_issue_157
99e642b (upstream/master, master) HEAD@{5}: reset: moving to upstream/master

Ответы [ 2 ]

3 голосов
/ 02 июня 2019

Краткий обзор: конфликты возникли, когда Git пытался скопировать существующий коммит, строка темы которого:

RM debugger

То есть, во время git rebase, который работает путем копирования некоторых серий коммитов в новый- и улучшенные коммиты, которые делают то же самое, что и оригиналы, за исключением некоторого улучшения (например, находясь на другой исходной базовой фиксации), Git попытался скопировать этот коммит и получил некоторые конфликты слияния.Таким образом, перебазирование остановлено, когда RM debugger еще не применено.

Затем вы проделали некоторую работу в своем дереве индекса и работы для разрешения этих конфликтов, включая git add в конце.Затем вы запустили git rebase --continue.

Это сообщение:

$ git rebase --continue
Applying: RM debugger
No changes - did you forget to use git add?

не означает, что конфликты .Это означает, что исходный код в вашем индексе, готовый для принятия в качестве новой и улучшенной копии RM debugger, будет точно таким же , что и исходный код в вашем существующем коммите dc04ac4 (improve warning), который сам является копией некоторого старого коммита, тема которого уже была improve warning.

Git не любит делать коммиты, которые повторяют один и тот же исходный код.(Git называет эти пустыми коммитами , хотя они вовсе не пустые, они просто повторяются.) Это настолько не нравится, что git rebase отказывается делать это вообще по умолчанию, в том числе послевы разрешили любые конфликты.

Иногда это признак того, что вы решили конфликт неправильно: вы случайно отменили изменение.Но, возможно, - это , что нужно сделать.

Если в данный момент правильно сделать, то отбросить исходный коммит полностью - если не требуется никаких измененийтеперь, потому что новая база для новых и улучшенных коммитов не нуждается в исправлении - просто запустите:

git rebase --skip

, чтобы сообщить Git: Этот коммит не должен быть скопирован после всех.

Если вам действительно нужен пустой коммит, вы можете вручную зафиксировать его самостоятельно, используя git commit --allow-empty, а затем git rebase --continue для продолжения.

1 голос
/ 02 июня 2019

Я думаю, что проблема в том, что нет изменений , которые будут применены к этой ревизии. Вероятно, вы хотите сделать git rebase --skip

...