# Atualizar um arquivo de uma branch para outra
# PERGUNTA
eu tenho duas branchs fora a main:
pedrograca@humbleV2:~/lead_tello/src/core$ git branch
main
teste_api_tello
* teste_selector
eu cuido da teste_selector e meu colega cuida da teste_api_tello.
main
teste_api_tello
* teste_selector
pedrograca@humbleV2:~/lead_tello/src/core$ git branch
main
teste_api_tello
* teste_selector
pedrograca@humbleV2:~/lead_tello/src/core$ tree
.
├── CMakeLists.txt
├── LICENSE
├── core
│ └── __init__.py
├── include
│ └── core
│ └── selector.hpp
├── msg
│ └── ReferenceStamped.msg
├── package.xml
├── scripts
│ └── api_tello.py
└── src
└── selector.cpp
eu cuido da pasta src (que tem o projeto cpp)
e ele cuida da pasta scripts (que tem o projeto py)
só que ele precisou mexer no arquivo CMakeList.txt (que antes era uma copia igual da main)
temos então 2 arquivos CMakeList.txt, o que ta na branch main e teste_selector e a que ta na branch teste_api_tello.
Eu quero pegar as alterações desse arquivo do meu colega, mas não quero carregar alterações de outros arquivos, como eu faço?
# Resposta
Para pegar as alterações de um arquivo específico de uma branch para outra sem afetar os demais arquivos, você pode usar o comando `git checkout` com o caminho do arquivo específico e a branch de onde deseja pegar as mudanças. Aqui estão os passos detalhados:
1. **Certifique-se de que está na sua Branch Atual:**
Primeiro, verifique se você está na branch em que deseja aplicar as alterações (neste caso, `teste_selector`):
```bash
git checkout teste_selector
```
2. **Buscar as Alterações da Branch Remota:**
Atualize as informações da branch remota para garantir que você tenha as últimas mudanças:
```bash
git fetch origin
```
3. **Verificar o Status dos Arquivos:**
Veja quais arquivos foram modificados na branch `teste_api_tello`:
```bash
git diff teste_api_tello --name-only
```
Isso mostrará todos os arquivos que foram modificados na branch `teste_api_tello`.
4. **Pegar as Alterações do Arquivo Específico:**
Use o comando `git checkout` para trazer o arquivo `CMakeLists.txt` da branch `teste_api_tello` para a sua branch atual (`teste_selector`):
```bash
git checkout teste_api_tello -- CMakeLists.txt
```
5. **Revisar as Mudanças:**
Verifique as mudanças que foram trazidas para garantir que estão corretas:
```bash
git diff CMakeLists.txt
```
6. **Fazer Commit das Mudanças:**
Faça commit das mudanças se estiver satisfeito com elas:
```bash
git add CMakeLists.txt
git commit -m "Atualizar CMakeLists.txt com alterações da branch teste_api_tello"
```
### Resumo dos Comandos:
```bash
# Certifique-se de estar na branch correta
git checkout teste_selector
# Buscar as alterações da branch remota
git fetch origin
# Verificar os arquivos modificados na branch teste_api_tello
git diff teste_api_tello --name-only
# Pegar o arquivo específico da outra branch
git checkout teste_api_tello -- CMakeLists.txt
# Revisar as mudanças
git diff CMakeLists.txt
# Fazer commit das mudanças
git add CMakeLists.txt
git commit -m "Atualizar CMakeLists.txt com alterações da branch teste_api_tello"
```
Seguindo esses passos, você conseguirá trazer apenas as mudanças específicas no arquivo `CMakeLists.txt` da branch `teste_api_tello` para a sua branch `teste_selector`, sem afetar os outros arquivos.