Mudar para outro ramo sem alterar os ficheiros da área de trabalho

Clonei um repositório de git do GitHub, fiz algumas mudanças e alguns commits; fiz muito e todos são bastante sujos, então eles não são adequados para um pedido de puxão. Agora eu criei o branch {[[0]} de origin/master, então ele está limpo, e eu quero enviar minhas alterações lá como um commit com um comentário de commit agradável.

Quando estou no comando local, quero mudar para o meu {[[0]} mas sem mudar os ficheiros. E depois posso comprometer-me.

Como posso mudar de ramo sem ... a mudar de ficheiros?

quero deixar claro: tenho todas as mudanças comprometidas no local master. Não há alterações por persistir.

Author: Nic Hartley, 2011-12-28

6 answers

Edit: acabei de reparar que disseste que já tinhas criado alguns commits. Nesse caso, use git merge --squash para fazer um único commit:

git checkout cleanchanges
git merge --squash master
git commit -m "nice commit comment for all my changes"

(Editar: a seguinte resposta aplica-se se tiver alterações por persistir.)

Basta trocar os ramos com git checkout cleanchanges. Se os ramos se referirem ao mesmo ref, então todas as suas alterações por persistir serão preservadas em seu diretório de trabalho quando você mudar.

A única altura em que terias um conflito é se algum arquivo no repositório é diferente entre origin/master e cleanchanges. Se acabaste de criar o ramo, então não há problema.

Como sempre, se está preocupado em perder o trabalho, faça uma cópia de segurança primeiro. O Git foi concebido para não deitar fora o trabalho sem lhe perguntar primeiro.
 51
Author: Greg Hewgill, 2011-12-27 23:39:31

Pira-te. Mudar para outro ramo

git checkout branch_name
 30
Author: Surendra Kumar Ahir, 2018-03-26 11:14:12

A melhor aposta éstash as alterações e mudar de ramo. Para mudar de ramo, é preciso um estado limpo. Por isso, esconda-os, verifique um novo ramo e aplique as alterações no novo ramo e envie-o para

 7
Author: vivek85, 2011-12-27 23:37:03
Parece que fizeste mudanças, comprometendo-as a dominar pelo caminho, e agora queres combiná-las num único commit.

Se assim for, você quer ajustar os seus commits, esmagando-os num único commit.

Não sei exactamente o que queres, por isso não te vou tentar com um guião. Mas eu sugiro que você leia sobre {[[0]} e as opções para"esmagar", e experimentar algumas coisas.
 1
Author: timdev, 2011-12-27 23:42:07

De outra forma, se quiser criar uma nova persistência em vez de realizar uma junção:

git checkout cleanchanges
git reset --hard master
git reset cleanchanges

git status
git add .
git commit

O primeiro reset (duro)irá configurar a sua árvore de trabalho como a última persistência em master.

O segundo reset irá colocar a sua cabeça de volta onde estava, apontando para a ponta do ramo cleanchanges, mas sem alterar quaisquer ficheiros. Então agora você pode adicioná-los e comprometê-los.


Depois, se quiser remover os commits Sujos que fez de {[[2]} (e assumindo que não o fez já os empurrei), você poderia: [[8]}

git checkout master
git reset --hard origin/master

Isto irá descartar todos os seus novos commits, devolvendo o seu branch local master para o mesmo commit que o do repositório.

 1
Author: joeytwiddle, 2014-01-26 06:14:06

A maneira mais simples de fazer é a seguinte:

git fetch && get checkout <branch_name>
 -1
Author: Mandeep Singh, 2018-07-02 07:18:50