Se eu tenho n confirmações, como posso ramificar a partir da confirmação n-3?
Eu posso ver o hash de cada commit.
git
branch
git-branch
dole doug
fonte
fonte
git push origin BRANCH_NAME
<sha1-of-commit>
corridagit checkout -b <name-of-branch> <sha1-of-commit>
, mas se o ramo já existegit checkout -B <name-of-branch> <sha1-of-commit>
Para fazer isso no github.com:
fonte
A mágica pode ser feita pelo git reset .
Crie uma nova ramificação e mude para ela (para que todas as suas confirmações mais recentes sejam armazenadas aqui)
git checkout -b your_new_branch
Volte para o seu ramo de trabalho anterior (suponha que seja mestre)
git checkout master
Remova os x commits mais recentes, mantenha o mestre limpo
git reset --hard HEAD~x # in your case, x = 3
A partir deste momento, todos os x commits mais recentes estão apenas na nova ramificação, e não na sua ramificação anterior (mestre).
fonte
git reset --hard
não é uma boa idéia se você já empurrou a comprometer-se a origem ...git push --force
se você já tinha empurrado o ramo antes #Se você não tiver certeza de qual confirmação você deseja ramificar antecipadamente, poderá verificar as confirmações e examinar o código delas (consulte fonte, compilação, teste)
Depois de encontrar o commit que você deseja ramificar, você pode fazer isso dentro do commit (ou seja, sem voltar ao mestre primeiro) apenas criando um branch da maneira usual:
fonte
fonte
git branch branchname <sha1-of-commit>
" (da resposta aceita)?git checkout -b
para criar um novo ramo.Uma maneira rápida de fazer isso no seu repositório do Github seria a seguinte:
fonte
Basta executar:
Por exemplo :
O
checkout
comando com o parâmetro-b
criará uma nova ramificação E passará para vocêfonte
git fetch
&git branch
command na pasta do seu projeto usando o terminal e verifique se o ramo de recurso existe; se esse for o caso, sim, é claro que você não poderá criar um ramo a partir de ramos excluídos, também poderá reverter uma exclusão de ramo, caso o O ramo se foi #Uma ótima pergunta relacionada é: como diabos você descobre isso usando a
--help
opção git? Vamos tentar isso:Vemos esta saída:
Gobbledegook.
Pesquise no texto subsequente a palavra "confirmar". Encontramos o seguinte:
Estamos chegando a algum lugar!
Agora, concentre-se nesta linha do gobbledegook:
Condense isso a isso:
E feito.
fonte
Para fazer isso no Eclipse:
Ele criará uma filial local para você. Então, sempre que você enviar suas alterações, sua filial será enviada para o servidor remoto.
fonte
Você pode fazer isso no Stash.
fonte
Consegui fazer assim:
Onde você deve inserir o valor de ignorar. 0 é o mais recente, 1 é o anterior, 2 é o commit antes disso, etc.
fonte
HEAD~1
(onde 1 especifica 1 confirmação)?Isso cria o ramo com um comando:
Prefiro esse caminho melhor do que os publicados acima, porque ele cria a ramificação imediatamente (não requer um comando de envio extra posteriormente).
fonte
Usando Sourcetree | O jeito mais fácil.
fonte
Isto é o que eu fiz:
Nesse caso,
8a75b001096536b3216022484af3026aa9c7bb5b
was e old commit pertencem aomaster
ramo.fonte
Vá para um commit específico de um repositório git
Às vezes, ao trabalhar em um repositório git, você deseja voltar para um commit específico (revisão) para obter uma captura instantânea do seu projeto em um horário específico. Para fazer tudo isso, é necessário o hash SHA-1 da confirmação, que você pode encontrar facilmente verificando o log com o comando:
que fornecerá uma lista compacta de todos os commits e a versão curta do hash SHA-1.
Agora que você conhece o hash do commit que deseja acessar, pode usar um dos 2 comandos a seguir:
ou
Verificação de saída
git checkout <commit> <paths>
Diz ao git para substituir o estado atual dos caminhos pelo estado no commit fornecido. Os caminhos podem ser arquivos ou diretórios.
Se nenhum ramo for fornecido, o git assumirá o commit HEAD.
Se nenhum caminho for especificado, o git se moverá
HEAD
para o commit fornecido (alterando o commit no qual você está sentado e trabalhando).Redefinir
Se você estiver em uma ramificação (normalmente deveria),
HEAD
e essa ramificação será movida para confirmação.Se você estiver no
HEAD
estado desconectado , o git reset será movido apenasHEAD
. Para redefinir uma ramificação, verifique primeiro.Se você quiser saber mais sobre a diferença entre git reset e git checkout, recomendo a leitura do blog oficial do git .
fonte
git log --abbrev-commit --pretty=oneline
pode ser abreviado paragit log --oneline
Para usuários da GUI do Git, é possível visualizar todo o histórico (se necessário) e clicar com o botão direito do mouse no commit do qual você deseja ramificar e inserir o nome do ramo.
fonte
Para fazer a resposta aceita no Visual Studio 2015 e 2017:
Clique nas alterações (seta vermelha acima)
Clique em Ações (seta vermelha acima) e clique em Exibir histórico no menu suspenso
E uma nova guia será aberta:
E você deve clicar com o botão direito do mouse no commit anterior ao qual deseja que seu código seja revertido:
Escolha fazer check-out de uma nova agência e pronto!
Abaixo, embora não faça parte da pergunta do OP, mas faço muito e este é um passo complicado, pelo menos para mim: se você deseja reverter para um commit anterior, sem fazer checkout de um novo branch, NÃO escolha reverter (! ?); você deve redefinir --mixed ou --hard:
fonte
se você usar a árvore de origem bastante simples.
fonte
Se você está procurando uma solução baseada em linha de comando, pode ignorar minha resposta. Eu vou sugerir que você use o GitKraken . É um cliente de interface do usuário extraordinário git. Ele mostra a árvore Git na página inicial. Você pode apenas olhar para eles e saber o que está acontecendo com o projeto. Basta selecionar um commit específico, clicar com o botão direito do mouse e selecionar a opção 'Criar uma ramificação aqui'. Ele fornecerá uma caixa de texto para inserir o nome da filial. Digite o nome do ramo, selecione 'OK' e você está definido. É realmente muito fácil de usar.
fonte