协作头脑风暴
brainstorming
在实现前澄清需求、探索设计选择,并形成清晰的开发方向。
resolve-git-conflicts【开发与工程】Resuelve conflictos de merge y rebase con estrategias seguras de recuperación. Cubre la identificación de fuentes de conflicto, lectura de marcadores de conflicto, elección de estrategias de resolución y cómo continuar o abortar operaciones de forma segura. Úsalo cuando un git merge, rebase, cherry-pick o stash pop reporte conflictos, cuando un git p…
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
Identifica, resuelve y recupera conflictos de merge y rebase.
git merge o git rebase reporta conflictosgit cherry-pick no puede aplicarse limpiamentegit pull resulta en cambios conflictivosgit stash pop entra en conflicto con el árbol de trabajo actualDetermina qué operación causó el conflicto:
# Check current status
git status
# Look for indicators:
# "You have unmerged paths" — merge conflict
# "rebase in progress" — rebase conflict
# "cherry-pick in progress" — cherry-pick conflict
La salida del estado te indica qué archivos tienen conflictos y qué operación está en curso.
Esperado: git status muestra archivos listados bajo "Unmerged paths" e indica la operación activa.
En caso de fallo: Si git status muestra un árbol limpio pero esperabas conflictos, la operación puede haberse completado o abortado ya. Revisa git log para ver la actividad reciente.
Abre cada archivo en conflicto y localiza los marcadores de conflicto:
<<<<<<< HEAD
// Your current branch's version
const result = calculateWeightedMean(data, weights);
=======
// Incoming branch's version
const result = computeWeightedAverage(data, weights);
>>>>>>> feature/rename-functions
<<<<<<< HEAD a =======: Tu rama actual (o la rama sobre la que estás haciendo rebase)======= a >>>>>>>: Los cambios entrantes (la rama que se fusiona o el commit que se aplica)Esperado: Cada archivo en conflicto contiene uno o más bloques con marcadores <<<<<<<, ======= y >>>>>>>.
En caso de fallo: Si no se encuentran marcadores pero los archivos aparecen como conflictivos, el conflicto puede ser un archivo binario o un conflicto de archivo eliminado vs. modificado. Revisa git diff --name-only --diff-filter=U para la lista completa.
Merge manual (más común): Edita el archivo para combinar lógicamente ambos cambios, luego elimina todos los marcadores de conflicto.
Aceptar los nuestros (conservar la versión de la rama actual):
# For a single file
git checkout --ours path/to/file.R
git add path/to/file.R
# For all conflicts
git checkout --ours .
git add -A
Aceptar los suyos (conservar la versión de la rama entrante):
# For a single file
git checkout --theirs path/to/file.R
git add path/to/file.R
# For all conflicts
git checkout --theirs .
git add -A
Esperado: Tras la resolución, el archivo contiene el contenido fusionado correcto sin marcadores de conflicto restantes.
En caso de fallo: Si elegiste el lado equivocado, vuelve a leer la versión en conflicto desde la base de la fusión. Durante un merge, git checkout -m path/to/file recrea los marcadores de conflicto para que puedas intentarlo de nuevo.
Después de editar cada archivo en conflicto:
# Stage the resolved file
git add path/to/resolved-file.R
# Check remaining conflicts
git status
Repite para cada archivo listado bajo "Unmerged paths".
Esperado: Todos los archivos pasan de "Unmerged paths" a "Changes to be committed". No quedan marcadores de conflicto en ningún archivo.
En caso de fallo: Si git add falla o quedan marcadores, vuelve a abrir el archivo y asegúrate de que todas las líneas <<<<<<<, ======= y >>>>>>> fueron eliminadas.
Una vez resueltos todos los conflictos:
Para merge:
git commit
# Git auto-populates the merge commit message
Para rebase:
git rebase --continue
# May encounter more conflicts on subsequent commits — repeat steps 2-4
Para cherry-pick:
git cherry-pick --continue
Para stash pop:
# Stash pop conflicts don't need a continue — just commit or reset
git add .
git commit -m "Apply stashed changes with conflict resolution"
Esperado: La operación se completa. git status muestra un árbol de trabajo limpio (o avanza al siguiente commit durante el rebase).
En caso de fallo: Si el comando continue falla, revisa git status en busca de archivos no resueltos. Todos los conflictos deben estar resueltos antes de continuar.
Si la resolución es demasiado compleja o elegiste el enfoque equivocado, aborta de forma segura:
# Abort merge
git merge --abort
# Abort rebase
git rebase --abort
# Abort cherry-pick
git cherry-pick --abort
Esperado: El repositorio vuelve al estado anterior al inicio de la operación. Sin pérdida de datos.
En caso de fallo: Si el abort falla (poco frecuente), revisa git reflog para encontrar el commit anterior a la operación y usa git reset --hard <commit> para restaurarlo. Úsalo con precaución — esto descarta los cambios sin commit.
Después de que la operación se complete:
# Verify clean working tree
git status
# Check that the merge/rebase result is correct
git log --oneline -5
git diff HEAD~1
# Run tests to confirm nothing is broken
# (language-specific: devtools::test(), npm test, cargo test, etc.)
Esperado: Árbol de trabajo limpio, historial de merge correcto, pruebas pasan.
En caso de fallo: Si las pruebas fallan tras la resolución, el merge puede haber introducido errores lógicos aunque los conflictos sintácticos estén resueltos. Revisa el diff detenidamente y corrige.
<<<<<<<, =======, >>>>>>>) en ningún archivogit status muestra un árbol de trabajo limpiogit log--ours o --theirs descarta completamente el otro lado. Úsalo solo cuando tengas la certeza de que una versión es completamente correcta.--amend a menos que el paso del rebase lo indique expresamente. Usa git rebase --continue en su lugar.git rebase --abort y git merge --abort descartan todo el trabajo de resolución. Solo aborta si quieres empezar de nuevo.commit-changes - hacer commit después de resolver conflictosmanage-git-branches - flujos de trabajo de ramas que llevan a conflictosconfigure-git-repository - configuración del repositorio y estrategias de merge