Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Erro no git rebase

Olá, executei o rebase conforme descrito no curso, alterei o arquivo com 2 usuários diferentes e provoquei intencionalmente um conflito alterando a mesma linha. O tópico ficou meio grande, mas está bem explicado. Agradeço antecipadamente, estou tentando executar os passos há vários dias e está dando erro

Seguem os passos executados:

usuário 1 - adiciona uma linha na branch local master e faz push para a master remota usuário 2 - cria e vai para a branch desenvolvimento e altera a mesma linha e faz o commit local usuário 2 - volta para a master, faz pull e volta para a branch desenvolvimento. usuário 2 - git rebase master desenvolvimento ocorre o conflito o conflito é resolvido no arquivo usuário 2 - git add proposta_1.html usuário 2 - git commit -m "resolvendo conflitos" usuário 2 - git rebase --continue Nesse ponto, o rebase deveria encerrar para fazer o merge com a master, mas continua o erro. Seguem abaixo os comandos executados e a saída do bash

usuario 2/propostas_homepage (desenvolvimento)
$ git status
On branch desenvolvimento
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   proposta_1.html

no changes added to commit (use "git add" and/or "git commit -a")

usuario 2/propostas_homepage (desenvolvimento)
$ git add proposta_1.html

usuario 2/propostas_homepage (desenvolvimento)
$ git commit -m "inclusão de 2 linhas"
[desenvolvimento 47c9ef3] inclusão de 2 linhas
 1 file changed, 2 insertions(+)

usuario 2/propostas_homepage (desenvolvimento)
$ git checkout master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.

usuario 2/propostas_homepage (master)
$ git pull
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (1/1), done.
remote: Total 3 (delta 1), reused 3 (delta 1), pack-reused 0
Unpacking objects: 100% (3/3), done.
From https://github.com/marcioasan/propostas_homepage
   e90c770..b54e0dc  master     -> origin/master
Updating e90c770..b54e0dc
Fast-forward
 proposta_1.html | 1 +
 1 file changed, 1 insertion(+)

usuario 2/propostas_homepage (master)
$ git checkout desenvolvimento
Switched to branch 'desenvolvimento'

usuario 2/propostas_homepage (desenvolvimento)
$ git rebase master desenvolvimento
First, rewinding head to replay your work on top of it...
Applying: inclusão de 2 linhas
error: Failed to merge in the changes.
Using index info to reconstruct a base tree...
M       proposta_1.html
Falling back to patching base and 3-way merge...
Auto-merging proposta_1.html
CONFLICT (content): Merge conflict in proposta_1.html
Patch failed at 0001 inclusão de 2 linhas
The copy of the patch that failed is found in: .git/rebase-apply/patch

Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".

usuario 2/propostas_homepage (desenvolvimento|REBASE 1/1)
$ git status
rebase in progress; onto b54e0dc
You are currently rebasing branch 'desenvolvimento' on 'b54e0dc'.
  (fix conflicts and then run "git rebase --continue")
  (use "git rebase --skip" to skip this patch)
  (use "git rebase --abort" to check out the original branch)

Unmerged paths:
  (use "git reset HEAD <file>..." to unstage)
  (use "git add <file>..." to mark resolution)

        both modified:   proposta_1.html
no changes added to commit (use "git add" and/or "git commit -a")

usuario 2/propostas_homepage (desenvolvimento|REBASE 1/1)
$ git add proposta_1.html

usuario 2/propostas_homepage (desenvolvimento|REBASE 1/1)
$ git commit -m "resolvendo conflitos"
[detached HEAD f1418c4] resolvendo conflitos
 1 file changed, 2 insertions(+)

usuario 2/propostas_homepage (desenvolvimento|REBASE 1/1)
***NESSE PONTO, O ARQUIVO JÁ TEVE O CONFLITO RESOLVIDO
$ git status
rebase in progress; onto b54e0dc
You are currently rebasing branch 'desenvolvimento' on 'b54e0dc'.
  (all conflicts fixed: run "git rebase --continue")

nothing to commit, working tree clean

usuario 2/propostas_homepage (desenvolvimento|REBASE 1/1)
$ git rebase --continue
Applying: inclusão de 2 linhas
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.

Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
3 respostas

Oi Marcio,

No caso do rebase, nós não criamos um novo commit com a resolução dos conflitos; fazemos isso apenas na resolução de conflitos com o comando merge.

Com o rebase, a resolução de conflitos é inserida nos commits que estão sendo aplicados aos poucos. Explicando melhor:Vamos pensar no cenário que a branch master tem os commits A e B, a branch desenvolvimento tem os commits A e C e os commits B (da master) e C (da desenvolvimento) alteram a mesma linha de um arquivo. Queremos atualizar a branch desenvolvimento com o trabalho da master, então usamos o comando git rebase master desenvolvimento. Ele vai fazer o seguinte: - deixar você atualmente na branch desenvolvimento - copiar o commit C pra uma branch temporária - migrar a branch desenvolvimento pra branch master, deixando ela com os commits A e B - aplicar o commit C na branch desenvolvimento

O conflito acontecerá nesse último passo. Então o rebase está tentando fazer um commit e encontrou um conflito no meio, ou seja, está com esse commit pendente. Precisamos então apenas resolver os conflitos, adicionar os arquivos pra deixá-los prontos pra commit (git add) e deixar o rebase continuar com o processo e aplicar o commit C (git rebase --continue). No seu procedimento, você criou um commit com a resolução do conflito, aí quando o rebase foi tentar aplicar o commit inclusão de 2 linhas, não havia mais mudanças a serem commitadas (já foram inclusas no commit resolvendo conflitos), causando uma falha na aplicação desse commit .

Ficou claro?Senão tento explicar mais detalhadamente. :)

Boa noite Ana,
obrigado pela explicação.
Entendi o que ocorreu e consegui executar aqui.
Então o curso está com erro, porque fala pra executar o commit após executar o add.
Segue o trecho da Aula 6

"Agora que já sabemos qual é o estado que queremos manter no repositório, basta adicionarmos o nosso arquivo no Index do Git, executando o comando git add proposta_1.html e realizar o commit executando o comando git commit -m 'alterando o rodapé'. Nesse momento, se executar o comando git status, teremos a seguinte saída:"
solução!

Oi Marcio, boa noite!

Bem observado! O texto estava com essa falha mesmo, mas já foi arrumado! :) E o video felizmente já estava correto.

Obrigada pelo aviso!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software