Resolver conflictos en una solicitud de extracción en un repositorio de AWS CodeCommit - AWS CodeCommit

AWS CodeCommit ya no está disponible para nuevos clientes. Los clientes existentes de AWS CodeCommit pueden seguir utilizando el servicio con normalidad. Más información

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Resolver conflictos en una solicitud de extracción en un repositorio de AWS CodeCommit

Si su solicitud de extracción tiene conflictos y no se puede combinar, puede intentar resolver los conflictos de varias formas:

  • En el equipo local, puede utilizar el comando git diff para encontrar los conflictos entre las dos ramificaciones y realizar cambios para resolverlos. También puede utilizar una herramienta de diferencias u otro software que le ayudarán a encontrar y resolver las diferencias. Una vez que las haya resuelto de forma satisfactoria, puede enviar su ramificación de origen con los cambios que contienen los conflictos resueltos, lo que actualizará la solicitud de extracción. Para obtener más información sobre git diff y git difftool, consulte la documentación de Git.

  • En la consola, puede elegir Resolve conflicts (Resolver conflictos). Esto abre un editor de texto sin formato que muestra los conflictos de forma similar al comando git diff. Puede revisar manualmente los conflictos de cada archivo que los contenga, realizar cambios y, a continuación, actualizar la solicitud de extracción con los cambios.

  • En el AWS CLI, puede utilizar la AWS CLI para obtener información sobre los conflictos de combinación y crear una confirmación de combinación sin referencias para probar una combinación.

Resolución de conflictos en una solicitud de extracción (consola)

Puede utilizar la consola de CodeCommit para resolver conflictos en una solicitud de extracción en un repositorio de CodeCommit.

  1. Abra la consola de CodeCommit en https://console.aws.amazon.com/codesuite/codecommit/home.

  2. En Repositories (Repositorios), seleccione el nombre del repositorio.

  3. En el panel de navegación, seleccione Pull requests (Solicitudes de extracción).

  4. De forma predeterminada, se muestra una lista de todas las solicitudes de extracción abiertas. Elija la solicitud de extracción abierta que desea combinar pero que contiene conflictos.

  5. En la solicitud de extracción, elija Resolve conflicts (Resolver conflictos). Esta opción solo aparece si hay conflictos que deben resolverse antes de que la solicitud de extracción se pueda combinar.

    Una solicitud de extracción que muestra que tiene conflictos que deben resolverse antes de que se pueda combinar.
  6. Se abre una ventana de resolución de conflictos que muestra todos los archivos que tienen conflictos que deban resolverse. Elija cada archivo de la lista para revisar los conflictos y haga los cambios necesarios hasta que se hayan resuelto todos los conflictos.

    El editor de resolución de conflictos muestra un archivo con conflictos que no se han resuelto todavía.
    • Puede optar por usar el contenido del archivo de origen, el contenido del archivo de destino o si el archivo no es un archivo binario, para editar manualmente el contenido de un archivo para que contenga únicamente los cambios que desee. Se utilizan marcadores de diferencia estándar de git para mostrar los marcadores de conflictos entre las ramificaciones de destino (HEAD) y de origen en el archivo.

    • Si un archivo es un archivo binario, un submódulo de Git o si hay un conflicto de nombre de archivo/carpeta, debe optar por utilizar el archivo de origen o el archivo de destino para resolver los conflictos. No puede ver o editar archivos binarios en la consola de CodeCommit.

    • Si hay conflictos de modo de archivo, verá la opción para resolver dicho conflicto eligiendo entre el modo de archivo del archivo de origen y el modo de archivo del archivo de destino.

    • Si decide que desea descartar los cambios para un archivo y restaurarlos a su estado en conflicto, elija Reset file (Restablecer archivo). Esto le permite resolver los conflictos en una manera diferente.

  7. Cuando esté satisfecho con los cambios, elija Undate pull request (Actualizar solicitud de extracción).

    nota

    Debe resolver todos los conflictos de todos los archivos para que pueda actualizar correctamente la solicitud de extracción con los cambios.

  8. La solicitud de extracción se actualiza con los cambios y se puede combinar. Verá la página de combinación. Puede elegir combinar la solicitud de extracción en este momento o puede volver a la lista de solicitudes de extracción.

Resolución de conflictos en una solicitud de extracción (AWS CLI)

Para utilizar los comandos de AWS CLI en CodeCommit, instale la AWS CLI. Para obtener más información, consulte Referencia de la línea de comandos.

Ningún comando de AWS CLI único le permitirá resolver los conflictos en una solicitud de extracción y combinar dicha solicitud. Sin embargo, puede utilizar los comandos individuales para descubrir los conflictos, intentar resolverlos y comprobar si una solicitud de extracción es combinable. Puede usar:

  • get-merge-options, para averiguar qué opciones de combinación están disponibles para combinar entre dos especificadores de confirmación.

  • get-merge-conflicts, para devolver una lista de archivos con conflictos de combinación en una combinación entre dos especificadores de confirmación.

  • batch-describe-merge-conflicts, para obtener información acerca de todos los conflictos de combinación en los archivos en una fusión entre dos confirmaciones mediante una estrategia de fusión especificada.

  • describe-merge-conflicts, para obtener información detallada sobre conflictos de combinación para un archivo específico entre dos confirmaciones mediante una estrategia de combinación especificada.

  • create-unreferenced-merge-commit, para probar el resultado de combinar dos especificadores de combinación mediante una estrategia de combinación especificada.

  1. Para descubrir qué opciones de fusión están disponibles para una combinación de dos especificadores de confirmación, ejecute el comando get-merge-options, especificando:

    • Un especificador de confirmación para el origen de la combinación (con la opción --source-commit-specifier).

    • Un especificador de confirmación para el destino para la combinación (con la opción --destination-commit-specifier).

    • El nombre del repositorio (con la opción --repository-name).

    • (Opcional) Una estrategia de resolución de conflictos que se va a utilizar (con la opción --conflict-resolution-strategy).

    • (Opcional) El nivel de detalle que desea sobre los conflictos (con la opción --conflict-detail-level).

    Por ejemplo, para determinar las estrategias de combinación disponibles para combinar una ramificación de origen denominada bugfix-1234 con una ramificación de destino denominada principal en un repositorio denominado MyDemoRepo:

    aws codecommit get-merge-options --source-commit-specifier bugfix-1234 --destination-commit-specifier main --repository-name MyDemoRepo

    Si se ejecuta correctamente, el resultado del comando será similar al siguiente:

    { "mergeOptions": [ "FAST_FORWARD_MERGE", "SQUASH_MERGE", "THREE_WAY_MERGE" ], "sourceCommitId": "d49940adEXAMPLE", "destinationCommitId": "86958e0aEXAMPLE", "baseCommitId": "86958e0aEXAMPLE" }
  2. Para obtener una lista de los archivos que contienen conflictos de combinación en una combinación entre dos especificadores de confirmación, ejecute el comando get-merge-conflicts, especificando:

    • Un especificador de confirmación para el origen de la combinación (con la opción --source-commit-specifier).

    • Un especificador de confirmación para el destino para la combinación (con la opción --destination-commit-specifier).

    • El nombre del repositorio (con la opción --repository-name).

    • La opción de combinación que desea utilizar (con la opción --merge-option).

    • (Opcional) El nivel de detalle que desea sobre los conflictos (con la opción --conflict-detail-level).

    • (Opcional) Una estrategia de resolución de conflictos que se va a utilizar (con la opción --conflict-resolution-strategy).

    • (Opcional) El número máximo de archivos con conflictos que devolver (con la opción --max-conflict-files).

    Por ejemplo, para obtener una lista de archivos que contienen conflictos en una combinación entre una ramificación de origen denominada feature-randomizationfeature y una ramificación de destino denominada principal con la estrategia de combinación de tres modos en un repositorio denominado MyDemoRepo:

    aws codecommit get-merge-conflicts --source-commit-specifier feature-randomizationfeature --destination-commit-specifier main --merge-option THREE_WAY_MERGE --repository-name MyDemoRepo

    Si se ejecuta correctamente, el resultado del comando será similar al siguiente:

    { "mergeable": false, "destinationCommitId": "86958e0aEXAMPLE", "sourceCommitId": "6ccd57fdEXAMPLE", "baseCommitId": "767b6958EXAMPLE", "conflictMetadataList": [ { "filePath": "readme.md", "fileSizes": { "source": 139, "destination": 230, "base": 85 }, "fileModes": { "source": "NORMAL", "destination": "NORMAL", "base": "NORMAL" }, "objectTypes": { "source": "FILE", "destination": "FILE", "base": "FILE" }, "numberOfConflicts": 1, "isBinaryFile": { "source": false, "destination": false, "base": false }, "contentConflict": true, "fileModeConflict": false, "objectTypeConflict": false, "mergeOperations": { "source": "M", "destination": "M" } } ] }
  3. Para obtener información sobre los conflictos de combinación en todos los archivos o un subconjunto de archivos en una combinación de dos especificadores de confirmación, ejecute el comando batch-describe-merge-conflicts, especificando:

    • Un especificador de confirmación para el origen de la combinación (con la opción --source-commit-specifier).

    • Un especificador de confirmación para el destino para la combinación (con la opción --destination-commit-specifier).

    • La opción de combinación que desea utilizar (con la opción --merge-option).

    • El nombre del repositorio (con la opción --repository-name).

    • (Opcional) Una estrategia de resolución de conflictos que se va a utilizar (con la opción --conflict-resolution-strategy).

    • (Opcional) El nivel de detalle que desea sobre los conflictos (con la opción --conflict-detail-level).

    • (Opcional) El número máximo de fragmentos de combinación que devolver (con la opción --max-merge-hunks).

    • (Opcional) El número máximo de archivos con conflictos que devolver (con la opción --max-conflict-files).

    • (Opcional) La ruta de archivos de destino que se va a utilizar para describir los conflictos (con la opción --file-paths).

    Por ejemplo, para determinar los conflictos de combinación para combinar una ramificación de origen denominada feature-randomizationfeature con una ramificación de destino denominada principal utilizando la estrategia COMBINACIÓN_TRES_MODOS en un repositorio denominado MyDemoRepo:

    aws codecommit batch-describe-merge-conflicts --source-commit-specifier feature-randomizationfeature --destination-commit-specifier main --merge-option THREE_WAY_MERGE --repository-name MyDemoRepo

    Si se ejecuta correctamente, el resultado del comando será similar al siguiente:

    { "conflicts": [ { "conflictMetadata": { "filePath": "readme.md", "fileSizes": { "source": 139, "destination": 230, "base": 85 }, "fileModes": { "source": "NORMAL", "destination": "NORMAL", "base": "NORMAL" }, "objectTypes": { "source": "FILE", "destination": "FILE", "base": "FILE" }, "numberOfConflicts": 1, "isBinaryFile": { "source": false, "destination": false, "base": false }, "contentConflict": true, "fileModeConflict": false, "objectTypeConflict": false, "mergeOperations": { "source": "M", "destination": "M" } }, "mergeHunks": [ { "isConflict": true, "source": { "startLine": 0, "endLine": 3, "hunkContent": "VGhpcyBpEXAMPLE==" }, "destination": { "startLine": 0, "endLine": 1, "hunkContent": "VXNlIHRoEXAMPLE=" } } ] } ], "errors": [], "destinationCommitId": "86958e0aEXAMPLE", "sourceCommitId": "6ccd57fdEXAMPLE", "baseCommitId": "767b6958EXAMPLE" }
  4. Para obtener información detallada sobre conflictos de combinación para un archivo específico en una combinación de dos especificadores de confirmación, ejecute el comando describe-merge-conflicts, especificando:

    • Un especificador de confirmación para el origen de la combinación (con la opción --source-commit-specifier).

    • Un especificador de confirmación para el destino para la combinación (con la opción --destination-commit-specifier).

    • La opción de combinación que desea utilizar (con la opción --merge-option).

    • La ruta del archivo de destino que se va a utilizar para describir los conflictos (con la opción --file-path).

    • El nombre del repositorio (con la opción --repository-name).

    • (Opcional) Una estrategia de resolución de conflictos que se va a utilizar (con la opción --conflict-resolution-strategy).

    • (Opcional) El nivel de detalle que desea sobre los conflictos (con la opción --conflict-detail-level).

    • (Opcional) El número máximo de fragmentos de combinación que devolver (con la opción --max-merge-hunks).

    • (Opcional) El número máximo de archivos con conflictos que devolver (con la opción --max-conflict-files).

    Por ejemplo, para determinar los conflictos de combinación para un archivo denominado readme.md en una ramificación de origen denominada feature-randomizationfeature con una ramificación de destino denominada principal utilizando la estrategia COMBINACIÓN_TRES_MODOS en un repositorio denominado MyDemoRepo:

    aws codecommit describe-merge-conflicts --source-commit-specifier feature-randomizationfeature --destination-commit-specifier main --merge-option THREE_WAY_MERGE --file-path readme.md --repository-name MyDemoRepo

    Si se ejecuta correctamente, el resultado del comando será similar al siguiente:

    { "conflictMetadata": { "filePath": "readme.md", "fileSizes": { "source": 139, "destination": 230, "base": 85 }, "fileModes": { "source": "NORMAL", "destination": "NORMAL", "base": "NORMAL" }, "objectTypes": { "source": "FILE", "destination": "FILE", "base": "FILE" }, "numberOfConflicts": 1, "isBinaryFile": { "source": false, "destination": false, "base": false }, "contentConflict": true, "fileModeConflict": false, "objectTypeConflict": false, "mergeOperations": { "source": "M", "destination": "M" } }, "mergeHunks": [ { "isConflict": true, "source": { "startLine": 0, "endLine": 3, "hunkContent": "VGhpcyBpEXAMPLE==" }, "destination": { "startLine": 0, "endLine": 1, "hunkContent": "VXNlIHRoEXAMPLE=" } } ], "destinationCommitId": "86958e0aEXAMPLE", "sourceCommitId": "6ccd57fdEXAMPLE", "baseCommitId": "767b69580EXAMPLE" }
  5. Para crear una confirmación sin referencia que representa el resultado de combinar dos especificadores, ejecute el comando create-unreferenced-merge-commit, especificando:

    • Un especificador de confirmación para el origen de la combinación (con la opción --source-commit-specifier).

    • Un especificador de confirmación para el destino para la combinación (con la opción --destination-commit-specifier).

    • La opción de combinación que desea utilizar (con la opción --merge-option).

    • El nombre del repositorio (con la opción --repository-name).

    • (Opcional) Una estrategia de resolución de conflictos que se va a utilizar (con la opción --conflict-resolution-strategy).

    • (Opcional) El nivel de detalle que desea sobre los conflictos (con la opción --conflict-detail-level).

    • (Opcional) El mensaje de confirmación que incluir (con la opción --commit-message).

    • (Opcional) El nombre que se va a utilizar para la confirmación (con la opción --name).

    • (Opcional) La dirección de correo electrónico para la confirmación (con la opción --email).

    • (Opcional) Si cualquier vacío para mantener carpetas (con la opción --keep-empty-folders).

    Por ejemplo, para determinar los conflictos de combinación para combinar una ramificación de origen denominada bugfix-1234 con una ramificación de destino denominada principal utilizando la estrategia ACEPTAR_ORIGEN en un repositorio denominado MyDemoRepo:

    aws codecommit create-unreferenced-merge-commit --source-commit-specifier bugfix-1234 --destination-commit-specifier main --merge-option THREE_WAY_MERGE --repository-name MyDemoRepo --name "Maria Garcia" --email "maria_garcia@example.com" --commit-message "Testing the results of this merge."

    Si se ejecuta correctamente, el resultado del comando será similar al siguiente:

    { "commitId": "4f178133EXAMPLE", "treeId": "389765daEXAMPLE" }