Si usa gitk --all
, puede ver todas las confirmaciones de su repositorio, de todas las sucursales. Quiero algo así, excepto solo los descendientes de un compromiso determinado.¿Cómo puedo obtener/enumerar/ver todos los descendientes de una confirmación con git (o gitk)?
Respuesta
Un compromiso solo conoce a su padre (y, por lo tanto, hasta el final) pero no tiene ni idea de sus hijos/descendientes. Debes usar una notación como A..B para encontrarla.
Por ejemplo, si usted quiere encontrar comete en rama actual ya que el commit dado A, puede hacer algo como esto:
git rev-list A..
'gitk --all' debe funcionar de alguna manera. Parece posible, al menos, codificarlo en primer 'gitk --all' y luego omitir cada commit que no tenga un commit dado como su padre. – Pistos
Creo que esto podría hacer lo que quiera. Todos los envíos en todas las ramas, que tienen A como ancestro:
gitk --all --ancestry-path A..
En resumen:
git log --all BRANCH~1..
En detalle, con ejemplos: Este es el árbol completo de un repositorio que acabo de crear:
$ git log --graph --oneline --decorate --all
* e3972be (HEAD, a) a-6
* 2707d79 a-5
* cdea9a7 a-4
| * 65b716e (c) c-5
| * ebe2a0e c-4
|/
| * 2ed9abe (b) b-4
|/
* ace558e (master) 3
* 20db61f 2
* 3923af1 1
Aparte de --all
, otra cosa es obvia: master
->HEAD
:
$ git log --graph --oneline --decorate master..
* e3972be (HEAD, a) a-6
* 2707d79 a-5
* cdea9a7 a-4
así que he intentado combinar ellos, y casi me consiguió lo que quería:
$ git log --graph --oneline --decorate --all master..
* e3972be (HEAD, a) a-6
* 2707d79 a-5
* cdea9a7 a-4
* 65b716e (c) c-5
* ebe2a0e c-4
* 2ed9abe (b) b-4
Pero, por desgracia, esto no muestra la relación entre las ramas, ya que la rama que estamos pidiendo sobre fue omitido. Así que tenemos que utilizar registro de los padres de master
así:
$ git log --graph --oneline --decorate --all master~1..
* e3972be (HEAD, a) a-6
* 2707d79 a-5
* cdea9a7 a-4
| * 65b716e (c) c-5
| * ebe2a0e c-4
|/
| * 2ed9abe (b) b-4
|/
* ace558e (master) 3
Ta-da! (No sé si esto simplemente no funcionó en el pasado, pero por las dudas: estoy en la versión de Git 1.7.1)
EDITAR 2017-11-17 - Gracias a STW por la realidad mostrando el problema con esto: los árboles independientes lo estropearían. Los compromisos que son totalmente independientes de master
se incluirán en esta salida. A partir de una copia de la cesión temporal anteriormente, esto es lo que mi último comando sería de salida:
$ git checkout --orphan z
Switched to a new branch 'z'
$ git commit --allow-empty -m'z-1'
[z (root-commit) bc0c0bb] z-1
$ git commit --allow-empty -m'z-2'
[z 1183713] z-2
$ git log --graph --oneline --decorate --all master~1..
* 1183713 (HEAD -> z) z-2
* bc0c0bb z-1
* 6069f73 (a) a-6
* 654d106 a-5
* a218c59 a-4
| * 338432a (c) c-5
| * 2115318 c-4
|/
| * 43a34dc (b) b-4
|/
* ce05471 (master) 3
El z
rama, siendo creado como un huérfano, no tiene historia común con master
, por lo z-1
y z-2
deberían haber sido excluidas pero no lo fueron Esto es para lo que es --ancestry-path
, ahora lo entiendo.Incluyendo excluirá rama z
:
$ git log --graph --oneline --decorate --all --ancestry-path master~1..
* 6069f73 (a) a-6
* 654d106 a-5
* a218c59 a-4
| * 338432a (c) c-5
| * 2115318 c-4
|/
| * 43a34dc (b) b-4
|/
* ce05471 (master) 3
Para completar, incluso teniendo en cuenta que ya había --ancestry-path
, la respuesta superior actual no muestra la relación sucursal correctamente porque excluye el commit en master
sí:
$ git log --graph --oneline --decorate --all --ancestry-path master..
* 6069f73 (a) a-6
* 654d106 a-5
* a218c59 a-4
* 338432a (c) c-5
* 2115318 c-4
* 43a34dc (b) b-4
He intentado juguetear con variaciones de esto, pero no parece mostrar lo que quiero [con gitk]. Por ejemplo, supongamos que ha creado una sucursal secundaria intermediaria y desde allí ha creado tres sucursales de nietos. ¿Cuál sería la forma de mostrar el gitk solo para esa familia de ramas, y nada de maestro, ni nada más? – Pistos
@Pistos Así que usando lo anterior, obtengo el mismo resultado en 'gitk' que' log' cuando uso 'gitk --all master..' (en oposición a' git log --all master ~ 1.'' - Entonces, para usar una rama que no sea maestra, pruebe 'gitk --all branchname..' (incluya los dos puntos) – Izkata
@Pistos También ahora noto que mi comentario ha terminado casi igual que la respuesta de jsvnm, excepto que no lo hago. t entiendo '--ancestry-path' y por qué sería necesario – Izkata
- 1. git: ¿cómo puedo listar TODOS los archivos presentes en una confirmación dada?
- 2. Git excluye una confirmación en una rama
- 3. ¿Cómo puedo aplicar una regla CSS a todos los descendientes de un elemento
- 4. ¿Cómo expandir todos los nodos (o descendientes de los seleccionados) de un plist a la vez?
- 5. ¿Cómo puedo "deshacer" una confirmación de Git revertida?
- 6. ¿Cómo puedo mostrar solo los nombres y los títulos de confirmación desde una etiqueta en Git?
- 7. Revertir parte de una confirmación con git
- 8. ¿Cómo puedo hacer una confirmación de Git en el pasado?
- 9. Obtener una lista de todos los empujes con Git
- 10. No puedo usar Descendientes() o Elementos() con xmlns
- 11. Cómo fusionar una confirmación específica en Git
- 12. Git commit style: ¿Todos los archivos cambiados a la vez o de uno en uno?
- 13. ¿Cómo configuro DiffMerge con msysgit/gitk?
- 14. ¿Cómo respaldo una confirmación en git?
- 15. ¿Restaurar una confirmación previa de git?
- 16. ¿cómo identifico los archivos/directorios que fueron agregados o eliminados en una confirmación de git?
- 17. Incluir submódulo los mensajes de confirmación con "git log"
- 18. GIT deshacer una confirmación que no es la más reciente, rebase todos los commits desde
- 19. ¿Cómo puedo obtener todos los elementos secundarios de los elementos con selectores CSS que usan selenio?
- 20. ¿Cómo eliminar una confirmación de huérfano en git?
- 21. C++: ¿Es "virtual" heredada a todos los descendientes
- 22. Problemas de Git con git push --todos
- 23. Cómo GIT revertir una confirmación utilizando un SHA
- 24. Git: ¿Cómo puedo encontrar una confirmación que coincida más estrechamente con un directorio?
- 25. Restablecer todos los cambios después de la última confirmación en git
- 26. ¿Cómo reverso un trozo específico de una confirmación en git?
- 27. Ver todos los `git diffs` con vimdiff
- 28. gitk error
- 29. ¿Volver a una confirmación específica basada en la identificación de confirmación con Git?
- 30. ¿Cómo eliminar la confirmación de git-notes?
Aunque la primera oración de manojlds es correcta, no es toda la verdad: sería posible bloquear algo que comprueba si cada ref tiene el compromiso determinado en su ascendencia, y luego mostrar el historial a partir de esos refs. – Cascabel
posible duplicado de [Obteniendo una lista de todos los hijos de una determinada comisión] (http://stackoverflow.com/questions/2613935/getting-a-list-of-all-children-of-a-given-commit) – jthill