виконується ребаза. Неможливо виконати. Як продовжувати чи зупиняти (переривати)?


139

Коли я бігаю:

git status

Я бачу це:

rebase in progress; onto 9c168a5
You are currently rebasing branch 'master' on '9c168a5'.
(all conflicts fixed: run "git rebase --continue")
nothing to commit, working directory clean

Коли я роблю:

ls `git rev-parse --git-dir` | grep rebase || echo no rebase

Я бачу: застосувати rebase

Я не можу покластися на походження.

git branch

Показує:

* (no branch, rebasing master)
  develop
  master

Я застряг. Я не знаю, що робити? Чи дійсно потрібно багато часу для відновлення? git rebase --continueнічого не робить. У мене немає нічого в статусі git .. Я просто чекаю на перезавантаження. Що я можу зробити?

UDATE: Це вихід: git rebase - продовжити

Applying: no message
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 prefer to skip this patch, run "git rebase --skip" instead.
To check out the original branch and stop rebasing, run "git rebase --abort".

git add. не має нічого.

Відповіді:


255

База даних не відбувається у фоновому режимі. "повторне базування" означає, що ви розпочали ребауз, і перервану через конфлікт. Вам потрібно відновити ребазу ( git rebase --continue) або скасувати її ( git rebase --abort).

Як git rebase --continueсвідчить повідомлення про помилку , ви попросили git застосувати патч, що призводить до появи порожнього патча. Швидше за все, це означає, що патч вже застосовано, і ви хочете його скинути за допомогою git rebase --skip.


Я оновив публікацію, щоб включити git rebase - продовжувати на ваш запит.
Джозеф Чемберс

2
Гаразд, тоді "це rebase - continue нічого не робить" було неточним. Вам слід було написати "git rebase - продовжуйте помилки наступним чином ...", щоб отримати допомогу.
Матьє Мой

3
Документація цього дуже погана, вона постійно повторює, що ви "git rebase - продовжуйте", і ви закінчитеся нескінченним способом сказати це.
Жан-Пол

6
git rebase --skip це зробив!
Борж

Оскільки це питання для відносних початківців (як я), я подумав, що варто згадати всю цю розмову про запуск того чи іншого - вимагає відкрити новий термінал і повернутися в репо ... ніщо б не працювало в моєму випадку цього питання без роблячи це,
Kdean571

10

Я застряг у "статусі ребазу", я отримав

On branch master
Your branch is up to date with 'origin/master'.

You are currently rebasing.
  (all conflicts fixed: run "git rebase --continue")

nothing to commit, working tree clean

але біг git rebase --skipпоступився error: could not read '.git/rebase-apply/head-name': No such file or directory.

Біг rm -fr ".git/rebase-apply"допоміг.

Примітка: звичайно, робіть це лише в тому випадку, якщо ви не переймаєтесь ребазом або якщо ви затрималися на попередній ребасті, ви більше не хочете.


8
  • Крок 1. Продовжуйте дію git rebase --continue

  • Крок 2: Виправте КОНФЛІКТИ потім git add .

  • Поверніться до кроку 1, тепер, якщо він говорить, no changes ..то запустіть, git rebase --skipтоді поверніться до кроку 1

  • Якщо ви просто хочете вийти із запуску бази даних git rebase --abort

  • Після того, як всі зміни будуть виконані, запустіть, git commit -m "rebase complete"і ви закінчите.


6

Ви сказали своєму сховищу перезавантажитись. Схоже, ви брали участь у вчиненні (визначено SHA 9c168a5), а потім зробили git rebase masterабо git pull --rebase master.

Ви повертаєте головного відділення до цього комітету. Ви можете закінчити оновлення через git rebase --abort. Це призведе до повернення стану, в якому ви були, перш ніж ви почали звільняти.


Я ніколи не роблю git rebase/pull --rebase master. Я часто опиняюся в такому стані ... через конфлікт. Я змінюю файл, виконую потяг, відновлюю свої зміни, і новий патч порожній, що болить мозок Git, який потім вирішує вступити в цей "режим
Alexis Wilke

6

Я нещодавно потрапив у цей стан. Після розв’язання конфліктів під час перезавантаження я вніс зміни, а не запустив git rebase --continue. Це дає ті самі повідомлення, які ви бачили, коли ви виконували свої команди git statusта git rebase --continueкоманди. Я вирішив проблему, запустивши git rebase --abortта повторно запустивши ребаю. Можливо, можна також пропустити базу даних, але я не був впевнений, який стан міг би залишити мене.

$ git rebase --continue
Applying: <commit message>
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 prefer to skip this patch, run "git rebase --skip" instead.
To check out the original branch and stop rebasing, run "git rebase --abort".

$ git status
rebase in progress; onto 4df0775
You are currently rebasing branch '<local-branch-name>' on '4df0775'.
  (all conflicts fixed: run "git rebase --continue")

nothing to commit, working directory clean

У додаванні --abort(+1), тепер у вас є --quit( stackoverflow.com/a/41363262/6309 )
VonC

Після виправлення конфліктів. тоді зателефонуйте git počin. виконайте якусь іншу роботу, а потім знову зателефонуйте git commit. Якщо ви використовуєте цей метод git rebase --abort, вся робота, яку ви робите після конфлікту, буде бажана. Тож будьте обережні
Jin

3

Якщо це git rebase --abortне працює, і ви все одно отримаєте

помилка: не вдалося прочитати '.git / rebase-apply / head-name': Немає такого файлу чи каталогу

Тип:

git rebase --quit

0

Я налаштовую її gitна автоматичну базу даних наgit checkout

# in my ~/.gitconfig file
[branch]
    autosetupmerge = always
    autosetuprebase = always

В іншому випадку він автоматично зливається при перемиканні між гілками, що, на мою думку, є найгіршим можливим вибором за замовчуванням.

Однак це має побічний ефект, коли я переходжу до гілки, і тоді git cherry-pick <commit-id>я опиняюся в такому дивному стані щоразу, коли виникає конфлікт.

Я фактично повинен перервати файл rebase, але спочатку я виправляю конфлікт, git add /path/to/fileфайл (ще один дуже дивний спосіб вирішення конфлікту в цьому випадку ?!), а потім виконайте a git commit -i /path/to/file. Тепер я можу перервати rebase:

git checkout <other-branch>
git cherry-pick <commit-id>
...edit-conflict(s)...
git add path/to/file
git commit -i path/to/file
git rebase --abort
git commit .
git push --force origin <other-branch>

Другий, git commit .здається, походить від аборту. Я виправлю свою відповідь, якщо дізнаюся, що мені слід rebaseшвидше робити аборт .

Клавіша --force"натискання" потрібна, якщо ви пропускаєте інші коміти, і обидві гілки не є рівними (в обох відсутні коміти з іншого).


"Інакше він автоматично зливається при переключенні між гілками" - Гм, ні. Git не здійснює ніякого злиття чи перезавантаження при переключенні гілок. autosetupmergeмає відношення до того, як git pullналаштовано нові гілки.
Marnen Laibow-Koser

У цей час, коли я боровся з цією проблемою, він впевнено зробив якесь об'єднання різних кодів. Моя поточна установка, схоже, пропускає цю проблему. Існує також проблема того, що ви не виконали + натисніть поточну гілку перед спробою переключення.
Алексіс Вілке

Git скаже вам, якщо ваші невмілі зміни перешкоджають перемиканню гілок, тому хвилюватися там не так багато, чи не так? Або ти говориш про щось інше?
Marnen Laibow-Koser


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.