El escenario es: hemos hecho una Pull Requests en Github y mientras esperamos que se la miren, otro compañero ha hecho su Pull Requests, ha mergeado y ahora, en la nuestra vemos lo siguiente.
Un bonito conflicto a resolver. Lo podemos hacer de dos maneras, o resolverlo a mano en Github o via nuestra terminal.
Vamos a ver como hacerlo en nuestra terminal
Situarse en la rama correcta
git checkout feature/WPA-23654
Cambiado a rama 'feature/WPA-23654'
Tu rama está actualizada con 'origin/feature/WPA-23654'.
Iniciamos el git pull en modo rebase
git pull --rebase origin master
¿Qué es el modo rebase en git pull? ¿Cuándo usar git pull –rebase?
I think you should use
https://stackoverflow.com/questions/2472254/when-should-i-use-git-pull-rebasegit pull --rebase
when collaborating with others on the same branch. You are in your work → commit → work → commit cycle, and when you decide to push your work your push is rejected, because there’s been parallel work on the same branch. At this point I always do apull --rebase
. I do not use squash (to flatten commits), but I rebase to avoid the extra merge commits.
Veamos lo que pasa cuando iniciamos el rebase
(venv) ➜ security-management git:(feature/WPA-23654) ✗ git pull --rebase origin master
remote: Enumerating objects: 10, done.
remote: Counting objects: 100% (10/10), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 4 (delta 2), reused 0 (delta 0), pack-reused 0
Desempaquetando objetos: 100% (4/4), 1.38 KiB | 472.00 KiB/s, listo.
Desde github.com:Wallapop/security-management
* branch master -> FETCH_HEAD
99ca504..9b22c5e master -> origin/master
Auto-fusionando infrastructure/security-alerts/template.yaml
CONFLICTO (contenido): Conflicto de fusión en infrastructure/security-alerts/template.yaml
error: no se pudo aplicar 378c547... add permissions to the lambda role to perform puts in cloudwatch
ayuda: Resolve all conflicts manually, mark them as resolved with
ayuda: "git add/rm <conflicted_files>", then run "git rebase --continue".
ayuda: You can instead skip this commit: run "git rebase --skip".
ayuda: To abort and get back to the state before "git rebase", run "git rebase --abort".
No se pudo aplicar 378c547... add permissions to the lambda role to perform puts in cloudwatch
Como se puede observar, Git nos pide que resolvamos el conflicto. Y lógicamente hemos de hacerlo manualmente. En este caso, es solo un archivo, un YAML. Veamos el problema.
<<<<<<< HEAD
Resource: '*'
=======
Resource: "*"
- Effect: "Allow"
Action:
- cloudwatch:Enable*
- cloudwatch:Put*
- cloudwatch:Set*
- cloudwatch:Describe*
- cloudwatch:List*
Resource: "*"
>>>>>>> 378c547 (add permissions to the lambda role to perform puts in cloudwatch)
Roles:
- !Ref SecurityAlertsRole
Lo que vemos es que, en master tenemos
Resource: '*'
mientras que en mi rama tenemos otra parte donde añadimos más permisos a un IAM ROLE. Vamos a resolver el conflicto, dejaremos el archivo así:
- Effect: "Allow"
Action:
- config:GetResourceConfigHistory
Resource: "*"
- Effect: "Allow"
Action:
- cloudwatch:Enable*
- cloudwatch:Put*
- cloudwatch:Set*
- cloudwatch:Describe*
- cloudwatch:List*
Resource: "*"
Roles:
- !Ref SecurityAlertsRole
Ahora vamos a añadir el cambio a nuestra rama.
Rutas no fusionadas:
(usa "git restore --staged <archivo>..." para sacar del área de stage)
(usa "git add <archivo>..." para marcar una resolución)
modificados por ambos: infrastructure/security-alerts/template.yaml
git:(038e745) ✗ ga infrastructure/security-alerts/template.yaml
Una vez añadido el fichero modificado, seguimos con el proceso.
git rebase --continue
Nos saldrá una pantalla interactiva donde podemos cambiar el nombre del commit.
[HEAD desacoplado e89e874] add permissions to the lambda role to perform puts in cloudwatch
1 file changed, 11 insertions(+), 1 deletion(-)
Rebase aplicado satisfactoriamente y actualizado refs/heads/feature/WPA-23654.
En este caso solo había un commit y no nos pide elegir los commits a añadir etc, como se explica aquí:
Pero en otros casos con más conflictos habremos de hacerlo. Ahora, seguimos y subimos nuestros cambios con
ggpush -f
Y listo, conflictos resueltos
(venv) ➜ security-management git:(feature/WPA-23654) ✗ ggpush -f
Enumerando objetos: 81, listo.
Contando objetos: 100% (81/81), listo.
Compresión delta usando hasta 16 hilos
Comprimiendo objetos: 100% (67/67), listo.
Escribiendo objetos: 100% (67/67), 7.90 KiB | 2.63 MiB/s, listo.
Total 67 (delta 45), reusados 0 (delta 0), pack-reusados 0
remote: Resolving deltas: 100% (45/45), completed with 12 local objects.
To github.com:Wallapop/security-management.git
+ f60f7b6...19b0000 feature/WPA-23654 -> feature/WPA-23654 (forced update)