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


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.