¿Cómo cambio correctamente el autor de una confirmación para las últimas confirmaciones en github?
⏰ 8 minutos de lectura
abejafriedman
Durante los últimos días usé una computadora portátil diferente, configuré git e inicié sesión, pero accidentalmente usé mi nombre de usuario con un correo electrónico incorrecto.
Hoy me di cuenta de que mis confirmaciones de los últimos días no aparecían en el panel de control de mi perfil de github, así que verifiqué lo que estaba pasando y noté que usé el correo electrónico incorrecto para iniciar sesión.
Intenté algunas formas diferentes de solucionarlo, pero ninguna de ellas funcionó.
1.
git rebase -i -p <The last commit with the good email>
Luego, para cada compromiso.
git commit --amend --author="good name <good email>" --no-edit
git rebase --continue
En lugar de simplemente cambiar el autor de las confirmaciones, hizo nuevas confirmaciones con mi buen correo electrónico pero no cambió las antiguas.
3.
En una de las respuestas, alguien mencionó que debería usar el mismo comando que usé.
git rebase -i -p <The last commit with the good email>
pero sin la “-p”. Lo probé, pero también hizo nuevos compromisos y no mantuvo los compromisos anteriores con las fechas anteriores.
Entonces, necesito ayuda para obtener todas las confirmaciones nuevas de mi historial y arreglar las antiguas para tener un buen correo electrónico.
Esta pregunta ha sido mencionada en meta.
– yivi
15 de julio de 2021 a las 7:16
De acuerdo, no nos dio ningún mensaje de error que esté recibiendo, pero: asegúrese de no eliminar sus nuevas confirmaciones 🙂 Como ya se publicó en esa respuesta que ya mencionó y también a continuación, si ha arreglado todo localmente, tienes que traerlo al servidor de la manera correcta y eso sería haciéndolo con el forced indicador: “git push –force”
– Janos Vincentler
18 de julio de 2021 a las 17:43
@JanosVinceller No recibí ningún error. Simplemente no cambió al autor en absoluto.
– Bee Friedman
18 de julio de 2021 a las 20:15
@BeeFriedman OK: sería git filter-repo ¿trabaja mejor?
– VoC
18 de julio de 2021 a las 20:17
NO PUEDES CAMBIAR LAS COMISIONES. Puede hacer etiquetas nuevas y volver a colgarlas para que se refieran a ellas en lugar de a las originales, pero NO PUEDES CAMBIAR LAS COMISIONES.
– jthill
20 de julio de 2021 a las 19:42
¡Gracias a todos los que ayudaron! Terminé obteniendo muchos enfoques diferentes, pero no funcionó para mí, terminé teniendo que reorganizar mi repositorio varias veces al estado anterior a los cambios porque las cosas se estropearon.
Al final me puse en contacto con el soporte de Github y esto es lo que me dijeron que hiciera, y funcionó. Lo publico aquí con la esperanza de que ayude a alguien que tenga un problema similar.
PD Esto es bastante similar a esta respuesta sugerida aquí, pero esa respuesta no funcionó cuando la probé. Este tiene algunos cambios menores (clonar una copia simple y realizar el cambio allí) y funcionó.
1 – Antes de ejecutar este script, necesitará:
La dirección de correo electrónico anterior que aparece en los campos de autor/autor que desea cambiar El nombre y la dirección de correo electrónico correctos a los que desea que se atribuyan dichas confirmaciones 2: cree un clon nuevo y simple de su repositorio:
git clone --bare <external repo URL>.git
cd <reponame>.git
3 – Copie y pegue el script, reemplazando las siguientes variables según la información que recopiló:
OLD_EMAIL
CORRECT_NAME
CORRECT_EMAIL
#!/bin/sh
git filter-branch --env-filter '
OLD_EMAIL="your-old-email@example.com"
CORRECT_NAME="Your Correct Name"
CORRECT_EMAIL="your-correct-email@example.com"
if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
then
export GIT_COMMITTER_NAME="$CORRECT_NAME"
export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
then
export GIT_AUTHOR_NAME="$CORRECT_NAME"
export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
fi
' --tag-name-filter cat -- --branches --tags
4 – Presione Enter para ejecutar el script.
5 – Revise el nuevo historial de Git en busca de errores.
6 – Empuje el historial corregido a:
git push --mirror <GitHub repo URL>.git
7 – Limpiar el clon temporal:
cd ..
rm -rf <reponame>.git
VonC
Pruebe primero y clone el repositorio en un separar carpeta local, para probar el siguiente comando.
Necesitas instalar newren/git-filtro-repo para volver a escribir el autor de su cuenta anterior a su cuenta nueva.
Eso reescribirá sus compromisos con el autor correcto.
Entonces necesitarás git push --force (suponiendo que uno main branch) para anular el historial remoto con sus nuevas confirmaciones. Si no está solo trabajando en el repositorio remoto, asegúrese de hacérselo saber a sus colaboradores.
en su respuesta, sugiere utilizar una herramienta de terceros. ¿No hay forma de hacerlo usando solo git?
– Bee Friedman
19 de julio de 2021 a las 2:50
@BeeFriedman No de manera confiable, por razones detalladas en github.com/newren/…. Darle una oportunidad. funciona muy bien
– VoC
19 de julio de 2021 a las 5:52
Lea la última línea del primer párrafo en el enlace de VonC 😉
– Íñigo
19 de julio de 2021 a las 7:07
@VonC, intenté usar esta herramienta y tengo algunos problemas. La única forma en que podría ejecutarlo es como un script de python, “git filter-repo.py” y cuando agrego las banderas y lo ejecuto, no sucede nada. ¿Podría explicar con más detalle cómo usarlo en Windows? ¡Gracias!
– Bee Friedman
20 de julio de 2021 a las 15:34
@BeeFriedman Lo probé en Windows (en un simple CMD) sin problema: git filter-repo (no .py extensión) es suficiente, siempre que python y el script (es decir, un clon de github.com/newren/git-filtro-repo) están en su %PATH%.
– VoC
20 de julio de 2021 a las 15:55
Anubhav Gupta
Estabas muy cerca del método correcto. simplemente no agregues -p mientras se rebase.
-p opción: volver a crear confirmaciones de combinación en lugar de aplanar el historial reproduciendo confirmaciones que introduce una confirmación de combinación.
Hice los mismos pasos que mencionaste en tu pregunta, sin -p, y funcionó perfectamente. Aquí está la lista de pasos en caso de que lo necesite.
En primer lugar, clone el repositorio localmente y realice una reorganización interactiva para todas las confirmaciones.
git rebase --interactive COMMIT~
Por ejemplo :-
git rebase --interactive 8020fc5fe36d75b066f7c06a29c92a29ccf6e2b4~
donde 8020fc5fe36d75b066f7c06a29c92a29ccf6e2b4 es la confirmación más antigua a partir de la cual desea comenzar a corregir.
Puede obtener este valor de git log
despues de correr git rebasedispondrás de un editor de texto, con opciones para pick/edit/… para cada compromiso.
Tomemos un ejemplo, donde obtienes algo como esto…
Luego, estará en el momento justo antes de aplicar el primer compromiso que ha establecido para edit.
Sin cambiar nada, haz los siguientes pasos..
git commit --amend --author="NAME <EMAIL>" --no-edit
git rebase --continue
Después de esto, el repositorio estará en el punto justo antes de aplicar la segunda confirmación que seleccionó para editasí que repítelo hasta que termines
Actualizar:
git rebase --committer-date-is-author-date HASH donde HASH es la primera confirmación con la marca de tiempo correcta.
Entonces hazlo git log --format=fuller para ver si las marcas de tiempo de confirmación son las que desea.
Seguí tu respuesta y comprometí todo con la fecha de hoy. Quiero que tengan las fechas originales. ¿Cómo podría deshacer esto y arreglarlo?
– Bee Friedman
20 de julio de 2021 a las 15:32
Lo siento, tuve la idea equivocada de que github mostraba la fecha del autor y no la fecha del autor de la confirmación. Se puede arreglar fácilmente, y he actualizado mi respuesta. Esperemos que solucione su problema. Sin embargo, ¿podría hacer git log y confirmar si las marcas de tiempo que está viendo en git log son las que desea ver en github? Si ese es el caso, siga la respuesta actualizada.
– Anubhav Gupta
21 de julio de 2021 a las 0:59
Sí, en el registro tienen las fechas correctas. Probaré tu respuesta actualizada. ¡Gracias!
– Bee Friedman
21 de julio de 2021 a las 1:01
espera, todavía lo estoy actualizando.
– Anubhav Gupta
21 de julio de 2021 a las 1:02
Terminé de agregar lo que tenía que agregar, git rebase --committer-date-is-author-date HASH donde HASH es la primera confirmación con la marca de tiempo correcta.
– Anubhav Gupta
21 de julio de 2021 a las 1:07
¿Ha sido útil esta solución?
Tu feedback nos ayuda a saber si la solución es correcta y está funcionando. De esta manera podemos revisar y corregir el contenido.
Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos.
Configurar y más información
Esta pregunta ha sido mencionada en meta.
– yivi
15 de julio de 2021 a las 7:16
De acuerdo, no nos dio ningún mensaje de error que esté recibiendo, pero: asegúrese de no eliminar sus nuevas confirmaciones 🙂 Como ya se publicó en esa respuesta que ya mencionó y también a continuación, si ha arreglado todo localmente, tienes que traerlo al servidor de la manera correcta y eso sería haciéndolo con el
forced
indicador: “git push –force”– Janos Vincentler
18 de julio de 2021 a las 17:43
@JanosVinceller No recibí ningún error. Simplemente no cambió al autor en absoluto.
– Bee Friedman
18 de julio de 2021 a las 20:15
@BeeFriedman OK: sería
git filter-repo
¿trabaja mejor?– VoC
18 de julio de 2021 a las 20:17
NO PUEDES CAMBIAR LAS COMISIONES. Puede hacer etiquetas nuevas y volver a colgarlas para que se refieran a ellas en lugar de a las originales, pero NO PUEDES CAMBIAR LAS COMISIONES.
– jthill
20 de julio de 2021 a las 19:42