É possível fazer um git merge
, mas sem um commit?
"man git merge" diz o seguinte:
With --no-commit perform the merge but pretend the merge failed and do not autocommit,
to give the user a chance to inspect and further tweak the merge result before
committing.
Mas quando tento usá git merge
- --no-commit
lo, ele ainda é confirmado automaticamente. Aqui está o que eu fiz:
$> ~/git/testrepo$ git checkout master
Switched to branch 'master'
$> ~/git/testrepo$ git branch
* master
v1.0
$> ~/git/testrepo$ git merge --no-commit v1.0
Updating c0c9fd2..18fa02c
Fast-forward
file1 | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
$> ~/git/testrepo$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
nothing to commit (working directory clean)
Um subsequente git log
revela todas as confirmações da ramificação v1.0 mescladas no mestre.
--no-commit
opção será efetiva somente se não ocorrer conflito; no caso de conflito, o git nunca será confirmado automaticamente.rm .git/MERGE_HEAD
posteriormente, o que forçará o git a esquecer que a mesclagem ocorreu.Automatic merge went well; stopped before committing as requested
git merge BRANCHENAME --no-commit --no-ff
deixei meu espaço de trabalho no estado git "MERGING". Não tenho muita certeza do que isso faz exatamente, mas um ciclo simplesgit stash save
egit stash pop
parecia retornar tudo ao normal; com apenas os arquivos modificados da ramificação de destino no lugar conforme pretendido e não mais com o status MERGING.Você está entendendo mal o significado da mesclagem aqui.
Os
--no-commit
impede que o MERGE COMMIT a ocorrer, e que só acontece quando você mesclar duas histórias divergentes de filiais; no seu exemplo, esse não é o caso, pois o Git indica que foi uma mesclagem de "avanço rápido" e, em seguida, o Git aplica apenas os commits já presentes na ramificação sequencialmente.fonte
git help merge
=> "Ao--no-commit
executar a mesclagem, mas finge que a mesclagem falhou e não é confirmada automaticamente, para dar ao usuário a chance de inspecionar e ajustar ainda mais o resultado da mesclagem antes de confirmar. " A chave do curso é usá-lo em conjunto com--no-ff
Se você deseja confirmar apenas todas as alterações em um commit como se você tivesse se digitado, --squash também
fonte
git merge v1.0 --no-commit --no-ff
Eu prefiro assim, para não precisar me lembrar de parâmetros raros.
Em seguida, ele diz que sua ramificação está "
#
" à frente com confirmações, agora você pode desabilitá-las e colocá-las nas alterações de trabalho com o seguinte:Por exemplo, se após a mesclagem for 1 confirmação antecipada, use:
Nota: No Windows, são necessárias aspas. (Como Josh observou nos comentários), por exemplo:
fonte
git reset "@~1"
Quando há um commit apenas no branch, eu costumo
fonte