El alias de la database de Git con un retraso de un segundo entre cada compromiso

Las dates de confirmación de Git se almacenan como timestamp de época de Unix, es decir, en segundos. Al rebasar, los commits múltiples obtienen la misma timestamp. Luego, a menudo aparecen en GitHub en el order incorrecto ( https://help.github.com/articles/why-are-my-commits-in-the-wrong-order/ ).

Me gustaría tener un alias para el command de rebase que espera un segundo entre cada confirmación. Idealmente, también sería compatible con el modo --interactive .

No hay una forma integrada de hacerlo, aunque si está utilizando una versión de Git en la que git rebase sigue siendo una serie de scripts de shell, puede modificar los scripts. Ahora que git rebase está principalmente en C, es mucho más difícil modificar la fuente para agregar un retraso entre commits. Pero aún podría usar los viejos scripts de shell (tenga en count que hay varios), copyrlos en sus propios scripts llamados old-rebase por ejemplo y modificarlos para ejecutar old-rebase--am y old-rebase--interactive , y ejecutar git old-rebase para despedirlos.


En cualquier caso, es más complicado de lo que has presentado. Cada confirmación tiene dos marcas de time: la timestamp "autor" y la timestamp "committer". Para ver ambos, ejecute git log --pretty=fuller , por ejemplo (hay otras forms de ver ambos, pero este es el único para comenzar).

Cuando ejecuta git rebase (no interactivo), Git generalmente 1 conserva la información del autor: el nombre, la dirección de correo electrónico y la timestamp del autor. El --committer-date-is-author-date establece la date del committer en la misma timestamp que la date del autor preservado, en lugar de establecerlo en "ahora mismo". El indicador --ignore-date establece la date del autor en la date del committer (es decir, "en este momento"). Git siempre te hará el committer.

Cuando ejecutas git rebase --interactive , Git usa git cherry-pick , para implementar cada command de git rebase --interactive . Esto no tiene botones de control: conserva la información del autor y te convierte en el confirmador, por lo que la date del autor es la date del autor original y la date del confirmador es "ahora mismo".

Al ver confirmaciones, le corresponde al espectador ( git log , o lo que sea) presentar las confirmaciones en algún order. Como hay dos dates -autor y committer-, se puede elegir aquí. Parece que GitHub utiliza la date del autor en la orderación de la list de confirmación de la request de extracción, por lo que el hecho de que las dates del confirmador estén dentro de un segundo el uno del otro no es realmente relevante.


1 Digo "generalmente" aquí porque hay muchos casos de esquina, especialmente con el código interactivo y la split o combinación de confirmaciones. Tenga en count que git rebase -p usa el código interactivo de una manera no interactiva, por lo que no admite --committer-date-is-author-date .