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:
git clone https://github.com/octocat/Spoon-Knife.git working_copy_1
cd working_copy_1
faça algumas alterações e as comprometa em uma ramificação temporária:
git checkout -b tmp_branch
git commit -a -m "temporary changes"
Agora, agrupe as alterações:
git bundle create ../tmp.bundle tmp_branch
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:
cd ..
git clone https://github.com/octocat/Spoon-Knife.git working_copy_2
cd working_copy_2
precisamos tratar nosso pacote como outro controle remoto, para que possamos buscar as alterações nele
git remote add tmp ../tmp.bundle
git fetch tmp
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:
git merge tmp/tmp_branch --squash
e tudo o que resta é remover o controle remoto temporário:
git remote remove tmp
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.