Crie uma ramificação no Git a partir de outra ramificação

989

Eu tenho dois ramos: master e dev

Eu quero criar um "ramo de funcionalidade" do dev ramo.

Atualmente no ramo dev, eu faço:

$ git checkout -b myfeature dev

... (algum trabalho)

$ git commit -am "blablabla"
$ git push origin myfeature

Mas, depois de visualizar meus galhos, obtive:

--**master**
------0-----0-----0-----0-----0
------------------------**dev**----**myfeature**

Quero dizer que o ramo parece ff fundido, e eu não entendo o porquê ...

O que estou fazendo de errado?

Você pode me explicar como se ramifica de outra ramificação e retorna ao repositório remoto da ramificação de recursos?

Tudo isso em um modelo de ramificação como o descrito aqui .

revohsalf
fonte

Respostas:

1431

Se você gosta do método no link que postou, dê uma olhada no Git Flow .

É um conjunto de scripts que ele criou para esse fluxo de trabalho.

Mas para responder sua pergunta:

$ git checkout -b myFeature dev

Cria a ramificação MyFeature do dev. Faça o seu trabalho e depois

$ git commit -am "Your message"

Agora, mescle suas alterações para dev sem avançar rapidamente

$ git checkout dev
$ git merge --no-ff myFeature

Agora envie as alterações para o servidor

$ git push origin dev
$ git push origin myFeature

E você verá como deseja.

Abizern
fonte
32
qual é a importância de pressionar myFeaturedepois de ter sido mesclado dev?
Alexander Suraphel 21/03
3
@spartacus Se a myFeatureramificação foi enviada ao servidor antes da mesclagem, nada. Mas se myFeatureainda não foi enviado ao servidor e você deseja que ele apareça no servidor, você deve enviá-lo separadamente.
xOneca 22/03
15
é git checkout -b myFeature devo mesmo que esses 3 comandos:, git checkout deventão git branch myFeaturee então git checkout myFeature?
22714 Kevin
3
É, ou deveria ser. Você está vendo algo diferente?
Abizern
33
Para esclarecer para outros iniciantes, é assim que uma --no-ffmesclagem se parece #
A__ /
407

Se você deseja criar uma nova ramificação a partir de qualquer uma das ramificações existentes no Git, basta seguir as opções.

Primeiro mude / efetue o checkout no ramo de onde você deseja criar um novo ramo. Por exemplo, se você tiver os seguintes ramos, como:

  • mestre
  • dev
  • branch1

Portanto, se você deseja criar um novo ramo chamado "subbranch_of_b1" sob o ramo chamado "branch1", siga as etapas:

  1. Finalize a compra ou mude para "branch1"

    git checkout branch1
    
  2. Agora crie seu novo ramo chamado "subbranch_of_b1" sob o "branch1" usando o seguinte comando.

    git checkout -b subbranch_of_b1 branch1
    

    O exemplo acima criará um novo ramo chamado subbranch_of_b1 sob o ramo branch1 (observe que branch1no comando acima não é obrigatório, pois o HEAD está apontando para ele no momento, você pode especificá-lo se estiver em um ramo diferente).

  3. Agora, depois de trabalhar com o subbranch_of_b1, você pode confirmar e enviar ou mesclar local ou remotamente.

Uma ilustração gráfica de exemplo de criação de ramificações sob outra ramificação

empurre o subbranch_of_b1 para controle remoto

 git push origin subbranch_of_b1 
Praveen George
fonte
7
como empurrar o subbranch_of_b1 para remoto ??
User269867
13
@ user269867: "git push origin subbranch_of_b1" fará esse trabalho para você.
Praveen George
4
Agora, se eu enviar alterações para mestre, elas ocorrerão no branch1 automaticamente?
Mestre Yoda
2
nota que Branch1 no comando acima não é obrigatória, já que a cabeça está atualmente apontando para ele, você pode precisa-lo se você estiver em um ramo diferente, embora isso é o que eu estava procurando
felipsmartins
10
Eu vim aqui me perguntando se git checkout -b some-branché taquigrafia git checkout -b some-branch master. Acontece que git checkout -b some-branché uma abreviação de #git checkout -b some-branch <current_active_branch>
Frank Henard
45

Criar uma filial

  • Criar ramificação quando a ramificação mestre é retirada. Aqui, as confirmações no mestre serão sincronizadas com o ramo que você criou.

    $ git branch branch1

  • Crie uma ramificação quando o ramo1 estiver com saída. Aqui as confirmações no branch1 serão sincronizadas com o branch2

    $ git branch branch2


Fazer checkout de uma agência

O comando git checkout alterna ramificações ou restaura os arquivos da árvore de trabalho

  • $ git checkout branchname

Renomeando uma ramificação

  • $ git branch -m branch1 newbranchname

Excluir uma ramificação

  • $ git branch -d branch-to-delete
  • $ git branch -D branch-to-delete ( forçar exclusão sem verificar o status mesclado )

Criar e alternar ramificação

  • $ git checkout -b branchname

Ramos completamente incluídos

  • $ git branch --merged


************************** Diferenças entre ramificações [git diff branch1..branch2] ************** **********

Diferença multilinha
  • $ git diff master..branch1
Diferença de linha única
  • $ git diff --color-words branch1..branch2
Gnanasekar S
fonte
1
Depois de renomear a ramificação, use também git push origin :old-name new-namepara excluir a ramificação remota de nome antigo e enviar a ramificação local com novo nome.
95faf8e76605e973 9/08/19
13

Faça trabalho simultâneo na devfilial. O que acontece é que, no seu cenário, o ramo de recursos avança da ponta do ramo de desenvolvimento, mas o ramo de desenvolvimento não muda. É mais fácil desenhar como uma linha reta, porque pode ser pensado como um movimento para a frente. Você chegou ao ponto A no dev e a partir daí simplesmente continuou em um caminho paralelo. Os dois ramos realmente não divergiram.

Agora, se você fizer um commit no dev, antes de mesclar, você começará novamente no mesmo commit, A, mas agora os recursos irão para C e dev para B. Isso mostrará a divisão que você está tentando visualizar, como as ramificações agora divergiram.

*-----*Dev-------*Feature

Versus

       /----*DevB
*-----*DevA
       \----*FeatureC
Desdentado
fonte
9

O Git 2.23 apresenta git switche git restoredivide as responsabilidades degit checkout

Criando uma nova ramificação a partir de uma ramificação existente a partir do git 2.23:

git switch -c my-new-branch

Mudou para uma nova ramificação 'my-new-branch'

  • -c é a abreviação de --create e substitui o conhecido git checkout -b

Dê uma olhada nesta postagem no blog do Github, explicando as alterações em mais detalhes:

O Git 2.23 traz um novo par de comandos experimentais para o conjunto de comandos existentes: git switch e git restore . Esses dois destinam-se a fornecer uma interface melhor para o conhecido git checkout. Os novos comandos pretendem que cada um tenha uma separação clara, dividindo cuidadosamente quais são as muitas responsabilidades do git checkout

JSON C11
fonte
9

Para criar uma ramificação a partir de outra ramificação no diretório local, você pode usar o seguinte comando.

git checkout -b <sub-branch> branch

Por exemplo:

  • nome do novo ramo a ser criado 'XYZ'
  • nome do ramo ABC sob o qual o XYZ deve ser criado
git checkout -b XYZ ABC
Sumit Ghewade
fonte
3

Se você deseja criar um ramo a partir de outro ramo, siga as etapas abaixo:

Pressupostos :

  1. Você está atualmente no ramo mestre.
  2. Você não tem alterações para confirmar. (Se você tiver alguma alteração a confirmar, esconda-a!).
  3. BranchExistingé o nome da ramificação da qual você precisa criar uma nova ramificação com o nome BranchMyNew.

Passos :

  1. Busque a ramificação na sua máquina local.

    $ git fetch origin BranchExisting : BranchExisting
    

Este comando criará uma nova ramificação em seu local com o mesmo nome de ramificação.

  1. Agora, do checkout da ramificação principal até a ramificação recém-buscada

    $ git checkout BranchExisting
    
  2. Agora você está no BranchExisting. Agora crie uma nova ramificação a partir dessa ramificação existente.

    $ git checkout -b BranchMyNew
    

Aqui está!

Darshit
fonte
1

Para criar uma ramificação a partir de outra, também é possível usar esta sintaxe:

git push origin refs/heads/<sourceBranch>:refs/heads/<targetBranch>

É um pouco mais curto que "git checkout -b" + "git push origin"

Alexander Samoylov
fonte