Como confirmar alterações em uma nova ramificação

150

Acabei de fazer alterações em um ramo. Como posso confirmar as alterações no outro ramo?

Estou tentando usar:

git checkout "the commmit to the changed branch" -b "the other branch"

No entanto, não acho que seja a coisa certa a fazer, porque, neste caso, estou criando um novo ramo em vez de confirmar as alterações no "outro ramo".

Devo usar o seguinte comando?

git merge "the other branch"
user1988385
fonte
Apenas um commit ou vários?
Carl Norum

Respostas:

267

git checkout -b your-new-branch

git add <files>

git commit -m <message>

Primeiro, faça o checkout de sua nova filial. Em seguida, adicione todos os arquivos que você deseja confirmar na preparação. Por fim, confirme todos os arquivos que você acabou de adicionar. Você pode fazer git push origin your-new-branchisso posteriormente para que suas alterações sejam exibidas no controle remoto.

John Brodie
fonte
1
desde que obtive a nova ramificação do git checkout v3.0 (a ramificação antes de fazer alterações) new-branch, ainda preciso usar "git add <files>"?
User1988385
Você pode fazer um git statuspara ver o que está atualmente preparado e o que não está.
John Brodie
5
Por que ambos git adde git commit -a?
Carl Norum
11
Não é em git checkout -b your-new-branchvez de git checkout your-new-branch?
Schrodinger's'Cat
1
e se eu já tiver rastreado um arquivo e quiser mudar para um novo ramo, adicione esses arquivos ao novo ramo criado?
ass-king alguma pergunta
57

Se você não efetuou alterações

Se suas alterações forem compatíveis com a outra ramificação

Esse é o caso da pergunta, porque o OP quer se comprometer com uma nova ramificação e também se aplica se suas alterações forem compatíveis com a ramificação de destino sem acionar uma substituição.

Como na resposta aceita por John Brodie, você pode simplesmente fazer o checkout da nova ramificação e confirmar o trabalho:

git checkout -b branch_name
git add <files>
git commit -m "message"

Se suas alterações forem incompatíveis com a outra ramificação

Se você receber o erro:

error: Your local changes to the following files would be overwritten by checkout:
...
Please commit your changes or stash them before you switch branches

Em seguida, você pode esconder seu trabalho, criar uma nova ramificação, exibir suas alterações e resolver os conflitos:

git stash
git checkout -b branch_name
git stash pop

Será como se você tivesse feito essas alterações depois de criar o novo ramo. Então você pode confirmar como de costume:

git add <files>
git commit -m "message"

Se você cometeu alterações

Se você deseja manter os commits na ramificação original

Veja a resposta de Carl Norum com a escolha da cereja, que é a ferramenta certa neste caso:

git checkout <target name>
git cherry-pick <original branch>

Se você não deseja manter os commits na ramificação original

Veja a resposta de joeytwiddle sobre essa duplicata em potencial . Siga qualquer uma das etapas acima, conforme apropriado, e reverta a ramificação original:

git branch -f <original branch> <earlier commit id>

Se você enviou as alterações para um controle remoto compartilhado como o GitHub, não deve tentar esta reversão, a menos que saiba o que está fazendo.

miguelmorin
fonte
3
Todos devem tentar este código. Como a maioria das pessoas que procura a resposta, elas já têm algumas alterações no seu código existente.
Sushin Pv
2
Por que você adicionou o stash e o stash pop? Quando você faz o checkout de uma nova ramificação, suas alterações estarão disponíveis para adicionar e confirmar, sem necessidade de esconder.
Tristan
@Tristan Você está certo no caso em que as alterações são compatíveis e os arquivos não substituem. Caso contrário, recebo error: Your local changes to the following files would be overwritten by checkout: ... Please commit your changes or stash them before you switch branches.Deseja escrever uma nova resposta ou editar minha resposta? Caso contrário, eu mesmo posso editá-lo.
miguelmorin 13/09/19
Ok, você está totalmente certo. Eu acho que você deve completar sua resposta, para mostrar o que ela traz, além da resposta aceita.
Tristan
@Tristan eu fiz isso. O OP estava perguntando sobre uma nova ramificação; nesse caso, a resposta aceita é a correta. Eu mantenho a minha enquanto outras pessoas achavam minha resposta útil. Tornou-se uma resposta longa e estou feliz em editar com qualquer feedback.
miguelmorin 14/09/19
24

Se bem entendi, você fez um commit changed_branche deseja copiá-lo other_branch? Fácil:

git checkout other_branch
git cherry-pick changed_branch
Carl Norum
fonte
5
Esta é a resposta certa para o que ele está tentando realizar.
Sean