Estoy trabajando en una regresión en el código fuente. Me gustaría decirle a Git: "verifique la fuente en función de una fecha / hora parametrizada". es posible?
También he realizado cambios en mi vista actual que no quiero perder. Idealmente, me gustaría alternar entre la fuente actual y alguna versión que me interese en base a una fecha anterior.
git
git-checkout
Amir Afghani
fuente
fuente
git bisect good
punto inicial .tags
.Respuestas:
Para mantener sus cambios actuales
Puede mantener su trabajo escondido, sin comprometerlo, con
git stash
. Lo usaríasgit stash pop
para recuperarlo. O puede (como dijo carleeto )git commit
en una rama separada.Pago por fecha usando rev-parse
Puedes pagar un commit antes de una fecha específica usando
rev-parse
esto:Puede encontrar más detalles sobre las opciones disponibles en el
git-rev-parse
.Como se señaló en los comentarios, este método utiliza el registro de registros para encontrar la confirmación en su historial. Por defecto estas entradas caducan después de 90 días . Aunque la sintaxis para usar el reflog es menos detallada, solo puede retroceder 90 días.
Salida por fecha usando rev-list
La otra opción, que no usa el reflog, es usar
rev-list
para obtener el commit en un momento particular con:Tenga en cuenta --first-parent si solo desea su historial y no las versiones introducidas por una fusión. Eso es lo que generalmente quieres.
fuente
git co 'master@{2 days ago}'
.git rev-list -n 1 --before="2009-07-27 13:37" master
$(...)
Se prefieren las subcapas .La solución de Andy no me funciona. Aquí encontré otra forma:
Git: pago por fecha
fuente
error: unknown switch `n'
alguna idea de cómo solucionar esto?Parece que necesitas algo similar a esto: pago Git basado en la fecha
En otras palabras, usas
rev-list
para encontrar el commit y luego usas checkout para obtenerlo.Si no desea perder sus cambios por etapas, lo más fácil sería crear una nueva rama y confirmarlos en esa rama. Siempre puede alternar entre las ramas.
Editar: el enlace está inactivo, así que aquí está el comando:
fuente
git checkout branch@{date}
deja de funcionar cuando expira el reflog, pero puedes usarlogit checkout `git rev-list -n 1 --before="2009-07-27 13:37" master`
.Para aquellos que prefieren una tubería para ordenar la sustitución
fuente
En mi caso, la
-n 1
opción no funciona. En Windows, descubrí que la siguiente secuencia de comandos funciona bien:Esto devuelve el SHA del commit apropiado para la fecha dada y luego:
fuente
La
git rev-parse
solución propuesta por @Andy funciona bien si la fecha que le interesa es la fecha de confirmación . Sin embargo, si desea realizar el pago en función de la fecha del autor ,rev-parse
no funcionará, ya que no ofrece una opción para usar esa fecha para seleccionar las confirmaciones. En su lugar, puede usar lo siguiente.(Si también desea especificar el tiempo de uso
$1 >= "2016-04-12" && $2 >= "11:37"
en el predicado awk ).fuente
Yendo más allá con la
rev-list
opción, si desea encontrar la confirmación de fusión más reciente de su rama maestra en su rama de producción (como un ejemplo puramente hipotético):Necesitaba encontrar el código que estaba en los servidores de producción a partir de una fecha determinada. Esto lo encontré para mí.
fuente
Si desea poder volver a la versión precisa del repositorio en el momento en que realiza una compilación, es mejor etiquetar la confirmación desde la que realiza la compilación.
Las otras respuestas proporcionan técnicas para devolver el repositorio a la confirmación más reciente en una rama en un momento determinado, pero puede que no siempre sean suficientes. Por ejemplo, si construye desde una rama, y luego elimina la rama, o construye desde una rama que luego se reescribe, la confirmación desde la que construyó puede volverse "inalcanzable" en git desde cualquier rama actual. Los objetos inalcanzables en git pueden eventualmente eliminarse cuando se compacta el repositorio.
Poner una etiqueta en el commit significa que nunca se volverá inalcanzable, sin importar lo que hagas con las ramas después (salvo quitar la etiqueta).
fuente
tome la cadena impresa (por ejemplo XXXX) y haga:
fuente