Estou escrevendo alguns scripts para meu fluxo de trabalho Git.
Eu preciso redefinir outro branch (existente) para o atual, sem check-out.
Antes:
CurrentBranch: commit A
OtherBranch: commit B
Depois de:
CurrentBranch: commit A
OtherBranch: commit A
Equivalente a
$ git checkout otherbranch
$ git reset --soft currentbranch
$ git checkout currentbranch
(Observação --soft
: não quero afetar a árvore de trabalho.)
Isso é possível?
Respostas:
Os fluxos de trabalho que você descreve não são equivalentes: ao executar,
reset --hard
você perde todas as alterações na árvore de trabalho (você pode querer fazer issoreset --soft
).O que você precisa é
fonte
refs/heads/
...git push . current:other
. Isso funciona semrefs/heads
(/ cc @elliottcable) e também impede que você atualize o branch em check-out. Observe que você pode precisar passar -f (ou usar+current:other
) se a atualização não for um avanço rápido.-m 'some text'
argumento para registrar o motivo da atualização ref a ser mostrada porgit reflog OtherBranch
comando, como "sincronizado com CurrentBranch". Pode ser útil lembrar por que você fez isso mais tarde.git update-ref refs/heads/OtherBranch refs/heads/CurrentBranch
ougit push . CurrentBranch OtherBranch
quando poderia usar o muito mais limpo (IMO) emgit branch -f OtherBranch CurrentBranch
vez disso? (Veja minha resposta em git branch -f abaixo)Definido
otherbranch
para apontar para o mesmo commit quecurrentbranch
executandoA
-f
opção (forçar) diz quegit branch
sim, realmente pretendo substituir qualquerotherbranch
referência existente pela nova .Da documentação :
fonte
fatal: Cannot force update the current branch.
quando tento fazer isso.otherbranch
check-out. Esta questão SO é especificamente sobre redefinir outro branch para um commit diferente (ou seja, não redefinir o branch em check-out). O que você deseja fazer é redefinir o branch atual comgit reset targetbranch
para forçar o branch atual a ser apontadotargetbranch
. Adicione--hard
também para forçar a árvore de trabalho a esse conteúdo. Ou--soft
deixar o índice sozinho e apenas alterar o próprio ramo.branch -f
poderia fazer isso.Você pode sincronizar com este comando suas filiais a qualquer momento
Também sem -f ele substitui este conjunto de comandos
Pode ser útil quando você não precisa comprometer todos os seus arquivos em CurrentBranch e, portanto, não pode alternar para outros branches.
fonte
-f
opção a menos que seja absolutamente inevitável. Funciona bem sem ele no meu caso.