Eu tenho um ramo git (chamado v4), que foi feito do mestre ontem. Houve algumas mudanças para dominar, que eu quero entrar na v4. Então, na v4, tentei fazer uma nova redefinição do mestre, e um arquivo continua estragando tudo: um arquivo de texto de uma linha, que contém o número da versão. Este arquivo é app/views/common/version.txt
, que antes da nova rebase contém este texto:
v1.4-alpha-02
Aqui está o que estou fazendo:
> git rebase master
First, rewinding head to replay your work on top of it...
Applying: new version, new branch
error: patch failed: app/views/common/version.txt:1
error: app/views/common/version.txt: patch does not apply
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Auto-merging app/views/common/version.txt
CONFLICT (content): Merge conflict in app/views/common/version.txt
Failed to merge in the changes.
Patch failed at 0001 new version, new branch
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".
O version.txt
agora é assim:
<<<<<<< HEAD:app/views/common/version.txt
v1.4-alpha-02
=======
v1.4-alpha-01
>>>>>>> new version, new branch:app/views/common/version.txt
Então, eu arrumo e fica assim agora:
v1.4-alpha-02
e então eu tentei continuar: no começo eu tento um commit:
> git commit -a -m "merged"
# Not currently on any branch.
nothing to commit (working directory clean)
Sem sorte lá. Então, eu estava tentando adicionar o arquivo:
git add app/views/common/version.txt
Sem resposta. Nenhuma notícia é boa, eu acho. Então, eu tento continuar:
> git rebase --continue
Applying: new version, new branch
No changes - did you forget to use 'git add'?
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".
É nesse ponto, depois de dar voltas e mais voltas com isso, que estou batendo com a cabeça na mesa.
O que está acontecendo aqui? O que estou fazendo de errado? Alguém pode me esclarecer?
EDIT - para unutbu
Alterei o arquivo conforme sugerido e recebi o mesmo erro:
> git rebase master
First, rewinding head to replay your work on top of it...
Applying: new version, new branch
error: patch failed: app/views/common/version.txt:1
error: app/views/common/version.txt: patch does not apply
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Auto-merging app/views/common/version.txt
CONFLICT (content): Merge conflict in app/views/common/version.txt
Failed to merge in the changes.
Patch failed at 0001 new version, new branch
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 rebase master
e deixa falhar ; 2) então você editaversion.txt
e faz como deve parecer naquele ponto, e salva a edição; 3) então vocêgit add .../version.txt
; 4) então você fazgit rebase --continue
( não 'confirma' )! Serebase --continue
for bem-sucedido aqui, ele já está confirmado (não é necessáriogit commit
aqui!) - então, basta fazer issogit push
(se você usar um repositório remoto). Espero que isso ajude, se eu entendi direito:)
- saúde!Respostas:
Eu encontrei um problema semelhante com uma rebase. Meu problema foi causado porque um dos meus commit alterou apenas um arquivo e, ao resolver, descartei a alteração introduzida neste commit. Consegui resolver meu problema ignorando o commit (
git rebase --skip
) correspondente .Você pode reproduzir esse problema em um repositório de teste. Primeiro crie o repositório.
Em seguida, confirme o conteúdo original do
version.txt
master.Crie a
v4
ramificação e altere o conteúdo deversion.txt
.Volte para
master
e altere o conteúdo de,version.txt
para que haja um conflito durante o rebase.Volte para o
v4
ramo e tente fazer uma nova recuperação. Ele falha com um conflitoversion.txt
como planejado.Resolvemos o conflito selecionando o
master
conteúdo deversion.txt
. Nós adicionamos o arquivo e tentamos continuar com nossa nova base.Falha ! Vamos ver o que as mudanças
git
pensam que existem em nosso repositório.Ah ah, não há mudança. Se você leu em detalhes a mensagem de erro anterior,
git
nos informou e recomendou o usogit rebase --skip
. Ele nos disse: "Se não sobrar nada para o palco, é provável que algo já tenha introduzido as mesmas mudanças; você pode pular esse patch". Então, pulamos o commit e a rebase com sucesso.Palavra de cautela : Nota Por favor, que
git rebase --skip
vai cair completamente o commit quegit
tentou rebase. No nosso caso, isso deve ser bom, poisgit
está reclamando que este é um commit vazio. Se você acha que perdeu as alterações após a conclusão dagit reflog
recuperação , pode usar para obter o ID de confirmação do seu repositório antes dagit reset --hard
recuperação e usar para recuperar seu depósito nesse estado (esta é outra operação destrutiva).fonte
git rebase --skip
, você pula apenas uma única confirmação. Geralmente, emito umgit status
antes de pular um commit para ver se estou nessa situação.rebase --skip
:).git reflog purge
ougit reflog delete
ainda possa recuperar suas alterações usandogit reflog
. Tente fazer o checkout dos diferentes commit que são referenciados lá, um deles deve ser o estado da sua árvore antes de você iniciar o todogit rebase
.Citação a partir daqui: http://wholemeal.co.nz/node/9
fonte
Essa mensagem de erro é resultado da sua
git commit -a -m "merged"
. Se você apenas consertar o arquivo, executegit add <file>
egit rebase --continue
, deve funcionar bem.git rebase --continue
está tentando fazer uma confirmação, mas descobre que não há alterações pendentes para confirmar (porque você já as confirmou).fonte
git add <file>
não resolverá o problema.git rebase --continue
ainda relatóriosNo changes - did you forget to use 'git add'?
Altere app / views / common / version.txt para
Neste ponto da rebase, lembre-se de que você está resolvendo conflitos de mesclagem para mostrar a progressão da ramificação não mestre .
Então, ao refazer a
para
o conflito que você está resolvendo está em como criar A * na ramificação do tópico.
Então, depois de fazer
git rebase --abort
, os comandos devem serfonte
O comportamento que você está vendo não é o que eu esperaria de uma recuperação típica com apenas esse conflito. Considere o uso de uma ramificação separada para fazer essa reformulação (especialmente se você já enviou os commit remotamente e está encaminhando rapidamente). Além disso,
git mergetool
pode ser útil para resolver conflitos e lembrar-se de emitir agit add
.Neste exemplo mínimo, a rebase funciona conforme o esperado. Você pode fornecer um exemplo que mostra o comportamento que está vendo?
fonte
Aqui estão algumas idéias:
rm -rf .git/rebase-apply
fonte