Pergunta

Comecei algum trabalho em um novo recurso e, depois de codificar um pouco, decidi que esse recurso deveria estar em sua própria filial.

Como movo as alterações não comprometidas existentes para um novo ramo e redefinir a minha atual?

Quero redefinir minha filial atual, preservando o trabalho existente no novo recurso.

Foi útil?

Solução

Use o seguinte:

git checkout -b <new-branch>

Isso deixará sua filial atual como está, crie e consulte uma nova filial e mantenha todas as suas alterações. Você pode então se comprometer com:

git add <files>

e se comprometer com sua nova filial com:

git commit -m "<Brief description of this commit>"

As mudanças no diretório de trabalho e as mudanças realizadas no índice ainda não pertencem a nenhuma filial. Isso muda onde essas mudanças terminariam.

Você não Redefinir Seu ramo original, ele permanece como está. O último compromisso em <old-branch> ainda será o mesmo. Portanto, você checkout -b e então comprometer.

Outras dicas

Alternativamente:

  1. Salve as alterações atuais em um estoque temporário:

    $ git stash

  2. Crie uma nova filial baseada neste estoque e mude para a nova filial:

    $ git stash branch <new-branch> stash@{0}

Dica: use a tecla da guia para reduzir a digitação do nome do estoque.

Se você tem feito commits Em sua filial principal enquanto você codificou, mas agora você deseja mover essas confirmações para uma filial diferente:

  1. Copie seu histórico atual para uma nova filial, trazendo também quaisquer alterações não comprometidas:

    git checkout -b <new-feature-branch>
    
  2. Agora force o ramo original "bagunçado" a reverter: (sem mudar para ele)

    git branch -f <previous-branch> <earlier-commit-id>
    

    Por exemplo:

    git branch -f master origin/master
    

    Ou se você tivesse feito 4 compromissos:

    git branch -f master HEAD~4
    

Aviso: Parece que git branch -f master origin/master vai Redefina as informações de rastreamento para esse ramo. Então, se você configurou seu master ramo para empurrar para outro lugar que não origin/master Então essa configuração será perdida.

Uma alternativa é usar Esta técnica de redefinição. Mas essas instruções descartarão quaisquer alterações não comprometidas que você tenha. Se você quiser mantê -los, esconda -os primeiro e solte -os no final.

O cenário comum é o seguinte: Esqueci de criar a nova filial para o novo recurso e estava fazendo todo o trabalho no ramo antigo. Cometi todo o trabalho "antigo" para o ramo mestre e quero que meu novo ramo cresça a partir do "mestre". Eu não cometi um único compromisso do meu novo trabalho. Aqui está a estrutura da filial: "Master"-> "Old_Feature"

git stash 
git checkout master
git checkout -b "New_branch"
git stash apply

Se você o comprometer, você também poderá escolher o único ID de confirmação. Faço isso frequentemente quando começo a trabalhar no mestre e depois quero criar uma filial local antes de avançar para a minha origem/.

git cherry-pick <commitID>

Há muito que você pode fazer com a colheita, conforme descrito aqui, mas isso pode ser um caso de uso para você.

eu usei @Robin Responder e listar tudo o que fiz,

git status                               <-- review/list uncommitted changes
git stash                                <-- stash uncommitted changes
git stash branch <new-branch> stash@{1}  <-- create a branch from stash
git add .                                <-- add local changes
git status                               <-- review the status; ready to commit
git commit -m "local changes ..."        <-- commit the changes
git branch --list                        <-- see list of branches incl the one created above
git status                               <-- nothing to commit, working tree (new-branch) is clean
git checkout <old-branch>                <-- switch back

! Se o repositório tiver mais de um esconderijo, veja qual deles aplicar ao novo ramo:

git stash list  
  stash@{0}: WIP on ...  
  stash@{1}: WIP on ...

e inspecionar o esconder

git stash show stash@{1}

Ou inspecione todos os stashes de uma só vez:

git stash list -p

Na verdade, existe uma maneira muito fácil de fazer isso com o Github Desktop agora que eu não acredito ser um recurso antes.

Tudo o que você precisa fazer é mudar para a nova ramificação na área de trabalho do Github e isso solicitará que você deixe suas alterações na ramificação atual (que será escondida) ou trazer suas alterações com você para a nova ramificação. Basta escolher a segunda opção, para trazer as alterações para a nova filial. Você pode então se comprometer como de costume.

GitHub Desktop

Isso pode ser útil para todos que usam ferramentas para git

Comando

Switch Branch - ele moverá suas alterações para o novo ramo. Então você pode cometer alterações.

 $ git checkout -b <new-branch>

Tortoisegit

Clique com o botão direito do mouse no seu repositório e use o TortoiseGit-> Switch/checkout

enter image description here enter image description here

Sourcetree

Use o botão "checkout" para alternar a ramificação. Você verá o botão "checkout" na parte superior depois de clicar em uma ramificação. Alterações da ramificação atual serão aplicadas automaticamente. Então você pode cometê -los.

enter image description here

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top