2011-04-05 669 views
45

Tengo un commit xyz en mi sucursal local que deseo verificar si está incluido en un repositorio de versiones remoto; ¿Puedo hacer eso de alguna manera fácil? Podría clonar el repositorio remoto, pero espero una manera más agradable + más rápida. git ls-remote parecía prometedor, pero no encontró nada de valor para mí allí. ¡Gracias!git: verificar si commit xyz en repositorio remoto?

Respuesta

69

Supongamos que el control remoto que se refiere al repositorio remoto se llama origin. En ese caso, actualice primero todas sus ramas de seguimiento a distancia con:

git fetch origin 

Ahora puede utilizar la opción útil --contains a git branch para averiguar cuál de las ramas remotas contiene ese cometer:

git branch -r --contains xyz 

(El -r significa que solo se muestran las ramas de seguimiento remoto). Si la confirmación xyz está contenida en una o más de sus sucursales de seguimiento remoto, verá resultados como:

origin/test-suite 
    origin/HEAD -> origin/master 
    origin/master 

Si está contenido en su repositorio local, pero no en una de las sucursales de seguimiento remoto, la salida estará vacía. Sin embargo, si no se conoce en su repositorio en absoluto, que obtendrá el error malformed object name y un mensaje de uso que se comprometen - tal vez un poco confuso si no lo esperas ...

+2

¿Hay una manera de hacer esto con git fontanería? –

+1

@dpk: Probablemente iteraría sobre las ramas de seguimiento remoto con 'git for-each-ref' y probaría si la confirmación está contenida en cada rama comprobando si' git merge-base 'es lo mismo que' '. –

9

igual que Mark dijo ,

git branch -a --contains commitish 

Sin embargo, tenga cuidado para las ramas que contienen una versión palmitas/porcentualizada/fusionado de la confirmación.

Esto podría ser útil

git log --cherry-pick --left-right <commitish> ^remote/branchname 

Enumerará el commit SOLAMENTE si no existe (como escoja a) en la rama remota. Consulte la página del manual de registro para obtener una explicación sobre cómo --cherry-pick identifica equivalente compromete

Por supuesto fusiona/rebases con la resolución de conflictos o calabazas no se puede detectar automáticamente como esto

Cuestiones relacionadas