Às vezes, encontro o problema de ter código não confirmado em uma estação de trabalho que não está pronta para uma confirmação, mas precisa ser concluída em uma estação de trabalho ou laptop diferente.
Alguém tem uma solução para esse problema, como um "commit suave" ou alguma outra maneira de transferir as alterações para outra máquina para trabalhar com elas em outro lugar?
Eu preferiria não ser forçado a confirmar e enviar alterações que não foram implementadas adequadamente.
git stash
...?Respostas:
O seguinte pressupõe que seu repositório local é um clone de um repositório em outro servidor, por exemplo, github; e que você tem direitos para fazer alterações no servidor upstream. No meu exemplo, chamei esse repositório upstream de "origem". Corra
git remote show
para listar outros repositórios, isso pode lhe dar uma dica sobre como ele é chamado.Eu sugeriria fazer uma filial, então você pode conferir a filial em outra máquina. De fato, se você criar uma ramificação assim que começar a trabalhar, poderá "confirmar" sua ramificação, rastrear e fazer backup do seu trabalho, sem ter que ter um conjunto de códigos estável. Quando estiver satisfeito com o seu trabalho, você poderá mesclá-lo novamente ao seu ramo "mestre".
git checkout -b MyNewBranch
git push origin MyNewBranch
git checkout MyNewBranch
git checkout master
git merge MyNewBranch
git branch
fonte
git branch -d master
", estou confuso, isso não pede ao git para excluir o ramo principal? (essa é a impressão que eu tenho ao ler o manual do ramo git)Você pode usar
git diff
para criar um patch e aplicá-lo em outra máquina. Ou você pode criar uma confirmação temporária e puxá-la de outra máquina. Você pode até criar uma ramificação temporária em alguma outra máquina, enviar sua confirmação temporária para lá e excluir a ramificação.Meu método favorito é o segundo: criar uma confirmação temporária, depois ir para outra máquina e fazer algo assim:
fonte
git format-patch
?git diff
. Tem algo que estou perdendo?git format-patch deadbee..badcab1e
- Ele cria.patch
arquivos para cada confirmação separadamente, com um bom nome e uma mensagem de confirmação preservada.Eu comprometo . O empurrão para o ramo pessoal , confira do outro lado e altere. E exclua o ramo pessoal quando terminar.
É claro que você pode enviar diretamente entre os repositórios, pode usar o pacote ou
format-patch
/am
, mas um ramo pessoal é de longe a solução mais fácil. E reescrever o histórico não é grande coisa, desde que não seja enviado a nenhum ramo compartilhado. Em muitos projetos, as pessoas devem retroceder as ramificações dos recursos para mantê-las mais fáceis de entender para revisão.fonte
A abordagem fácil é a que você descreve: copie o
.git
diretório oculto e os arquivos do projeto para outra máquina onde você pode confirmar e finalizar, ou simplesmente continuar trabalhando.O
.git
diretório é onde seu histórico do git é mantido, portanto, preservá-lo junto com os arquivos reais mantém todo o histórico do projeto intacto.Se você estiver usando a máquina original de forma permanente, provavelmente recomendo essa abordagem.
fonte
Como outros responderam, com o Git, você não deve se importar com o código não finalizado em seus ramos pessoais. No entanto, se por algum motivo, você realmente não quer que seu trabalho inacabado toque o repositório principal, você pode utilizar a natureza distribuída do Git!
Existe uma ferramenta simples chamada
git bundle
que pode ajudá-lo a passar facilmente as mudanças sem um repositório central. Primeiro, clone o repositório:faça algumas alterações e as comprometa em uma ramificação temporária:
Agora, agrupe as alterações:
Agora você tem um arquivo de pacote configurável que pode ser enviado para sua nova máquina. Como você usa isso aí? Vamos criar uma nova cópia de trabalho:
precisamos tratar nosso pacote como outro controle remoto, para que possamos buscar as alterações nele
Como o objetivo principal era transferir as alterações sem deixar rastro, queremos compactá-las na cópia de trabalho para perder a confirmação temporária:
e tudo o que resta é remover o controle remoto temporário:
VIOLA! As alterações foram transferidas para a nova cópia de trabalho sem deixar rastro de ramificação nem confirmação!
Mas realmente - esse processo é bastante longo e complicado. Este é o Git, não o SVN - realmente não deve haver nenhuma razão para não levar seu ramo pessoal ao repositório central.
fonte