Comprometer alterações selecionadas em outra ramificação e retomar o trabalho na filial atual?

StackOverflow https://stackoverflow.com/questions/3871512

Pergunta

Isso acontece frequentemente no meu fluxo de trabalho: estou trabalhando em um recurso em uma filial separada e, ao fazer isso, vou encontrar pequenas coisas que precisam ser consertadas, mas são mais altas na estrutura ou no layout do site, por exemplo.

Eu quero voltar para o principal desenvolve ramificar e comprometer mudanças de selecionar arquivos lá e depois voltar para um característica Faça o ramo e o Rebase para que eu possa continuar lá com os ajustes/bugs não relacionados fora do caminho.

estou a usar git stash e git stash pop Para fazer isso, mas estou recebendo muitos conflitos de vários arquivos que modifi, mas não preciso estar comprometido com a filial pai de qualquer maneira.

Existe outra maneira de evitar conflitos ou, de alguma forma, salvar o estado atual e apenas puxar mudanças de árvore de trabalho selecionadas para outro ramo para cometer? (Mais ou menos como Git-Stash-Cherry-Pick ;-))

Foi útil?

Solução

  1. Cometer as mudanças que você deseja master em sua filial atual.
  2. Esconder suas mudanças restantes
  3. Troque para master ramificação e uso git cherry-pick Para mover as mudanças para master
  4. Volte para o seu ramo de penas e rebase (opcional)
  5. Solte as mudanças originais do recurso

Outras dicas

Eu costumo fazer o contrário. Continuo trabalhando no meu ramo de recursos até estar pronto para se comprometer lá. Assim que sou, adiciono todas as alterações que pertencem ao novo compromisso da filial ao índice, mas não aquelas que pertencem ao mestre. git add -p Et.al tornar isso realmente fácil. Uma vez que todas as mudanças relevantes no índice, comprometo -me com a filial. Todas as mudanças sujas restantes pertencem ao Master e serão transportadas muito bem quando eu mudar para isso para que eu possa comprometê -lo lá.

Tente voltar para master ramificação usando --merge opção. Ele tentará fazer uma mesclagem de três vias entre os dois ramos. A documentação do Git tem um bom exemplo:

2. After working in the wrong branch, switching to the correct
   branch would be done using:

      $ git checkout mytopic

   However, your "wrong" branch and correct "mytopic" branch
   may differ in files that you have modified locally, in which 
   case the above checkout would fail like this:

      $ git checkout mytopic
      error: You have local changes to 'frotz'; not switching branches.

   You can give the -m flag to the command, which would try a
   three-way merge:

      $ git checkout -m mytopic
      Auto-merging frotz

   After this three-way merge, the local modifications are not
   registered in your index file, so git diff would show you what
   changes you made since the tip of the new branch.

No macOS, Gitx Torna muito fácil fazer o tipo de seletivo que a RAFL descreve, então essa é uma boa maneira de abordá -lo se esse for o ambiente em que você está.

Também é possível/prático cometer mudanças de ramificação e alterações mestres em compromissos separados e depois usar git format-patch exportar os compromissos da filial como arquivos e git am para puxá -los para o mestre.

O perigo aqui é se os arquivos em torno das alterações forem muito diferentes; nesse caso, pode haver conflitos ao puxar os compromissos com o mestre.

Que tal criar um ramo temporário?

Algo como:

- oh crap need to do somethning else now
- git checkout -b ResumeLater
- git add .
- git commit
- git checkout ImportantStuff
- ....
- git checkout ResumeLater
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top