Exemplo: você tem um branch refactor
que é bastante diferente do master. Você não pode fundir todos os commits, ou mesmo cada pedaço em qualquer commit ou master irá quebrar, mas você fez muitas melhorias que gostaria de trazer para o master.
No mestre:
> git checkout -b temp
Na temperatura:
> git merge --no-commit --no-ff refactor
… que organiza tudo, então:
> git reset head
Em seguida, comece a adicionar alterações:
> git add --interactive
O seguinte é de uma fusão real:
staged unstaged path
1: unchanged +1/-1 deploy_settings.py
2: unchanged +4/-3 requirements.txt
3: unchanged +2/-1 settings/defaults.py
4: unchanged +1/-1 settings/production.py.example
*** Commands ***
1: status 2: update 3: revert 4: add untracked
5: patch 6: diff 7: quit 8: help
What now>
Escolha p
para patch.
staged unstaged path
1: unchanged +1/-1 deploy_settings.py
2: unchanged +4/-3 requirements.txt
3: unchanged +2/-1 settings/defaults.py
4: unchanged +1/-1 settings/production.py.example
Patch update>>
Digite o número ao lado do arquivo que deseja processar primeiro.
Você pode continuar inserindo números até selecionar todos os arquivos ou pode fazê-los um de cada vez. um asterisco aparecerá próximo aos arquivos selecionados.
Pressione ‘enter’ sem inserir um número (ou nada) para continuar
para a próxima etapa.
Você verá um único pedaço de diff e ele perguntará se você deve selecioná-
lo ou não:
diff --git a/deploy_settings.py b/deploy_settings.py
index 9b110f4..c5b228e 100644
--- a/deploy_settings.py
+++ b/deploy_settings.py
@@ -4,7 +4,7 @@ This file holds the Fabric deployment settings for this project
from fabric.state import env
#env.project = 'my_project' #The name of this project
-#env.repo_base = 'git@git.oldsite.com:%s.git' % env.project
+#env.repo_base = 'git@git.newsite.com:%s.git' % env.project
Stage this hunk [y,n,q,a,d,/,e,?]?
Entre y
no palco, n
para pular. Isso vai continuar para cada pedaço diff nos arquivos selecionados até que você volte para:
*** Commands ***
1: status 2: update 3: revert 4: add untracked
5: patch 6: diff 7: quit 8: help
What now>
Você pode entrar s
para ver o que mudou
staged unstaged path
1: unchanged +1/-1 deploy_settings.py
2: +4/-3 nothing requirements.txt
3: +2/-1 nothing settings/defaults.py
4: unchanged +1/-1 settings/production.py.example
*** Commands ***
1: status 2: update 3: revert 4: add untracked
5: patch 6: diff 7: quit 8: help
What now>
Você pode sair agora, então entre q
. Em seguida, execute alguns comandos status e diff para explorar as mudanças em estágios e não em estágios e certifique-se de que tenham a aparência esperada.
Não se esqueça de quaisquer arquivos não rastreados, conforme apropriado.git add
Finalmente:
> git commit -m "merged selected patches from refactor branch"
# don't do commit -a here… you only want to commit the staged changes
Reverter alterações não planejadas …
> git checkout .
… e mesclar para master
> git checkout master
> git merge temp
> git branch -D temp
compartilhado aqui e as pessoas parecem achar útil