Cómo impulsar una nueva sucursal sin historial

95

Tengo un repositorio de git con dos ramas no relacionadas, master y configs. Creé configuraciones, purgué todos los archivos y luego los coloqué solo en archivos de configuración. Ahora quiero presionar esto en un repositorio remoto, pero como si fuera una nueva rama vacía (sin registros de todos mis cambios y revisiones anteriores de la rama original).

¿Cómo puedo purgar todo el historial y enviarlo?

Tomás Pruzina
fuente

Respuestas:

157

Purgar todos los archivos no elimina el historial. Primero debe crear una rama que no tenga historial y luego agregar sus archivos de configuración. Estos días git checkouttiene una --orphanopción que hace una sucursal sin historial. Aquí está la información sobre la --orphanopción:

--huérfano <nueva_rama>

Cree una nueva rama huérfana, llamada <new_branch>, comenzada desde <start_point> y cambie a ella. La primera confirmación realizada en esta nueva rama no tendrá padres y será la raíz de un nuevo historial totalmente desconectado de todas las demás ramas y confirmaciones.

El índice y el árbol de trabajo se ajustan como si hubiera ejecutado previamente "git checkout <start_point>". Esto le permite iniciar un nuevo historial que registra un conjunto de rutas similares a <start_point> ejecutando fácilmente "git commit -a" para hacer que la raíz se confirme.

Esto puede resultar útil cuando desee publicar el árbol desde una confirmación sin exponer su historial completo. Es posible que desee hacer esto para publicar una rama de código abierto de un proyecto cuyo árbol actual es "limpio", pero cuyo historial completo contiene bits de código patentados o de otro modo gravados.

Si desea iniciar un historial desconectado que registre un conjunto de rutas que sea totalmente diferente al de <start_point>, entonces debe borrar el índice y el árbol de trabajo justo después de crear la rama huérfana ejecutando "git rm -rf. " desde el nivel superior del árbol de trabajo. Posteriormente, estará listo para preparar sus nuevos archivos, repoblar el árbol de trabajo, copiarlos de otro lugar, extraer un tarball, etc.

Aquí hay un enlace a la documentación para realizar el pago . También puedes correr git help checkout.

Una vez que haya creado su rama sin historial, cuando la envíe al servidor, tampoco tendrá ese historial. FWIW, me ayuda a pensar git pushen "hacer que la rama remota tenga el mismo aspecto que la local". Entonces, si tiene historial y empuja, tendrá historial. Si no lo hace, la rama empujada no lo hará.

John Szakmeister
fuente
37

¿Cómo puedo purgar todo el historial y enviarlo?

git checkout --orphan <name_you_choose_for_orphan_branch>
git commit

Entonces puedes ejecutar tu

git push <remote-name> <branch-name>


cf. este de una sola línea

Geremia
fuente
16

Necesitaba hacer esto para enviar un código a un autónomo sin compartir información privada o borrar mi historial.

En caso de que alguno de ustedes esté usando SourceTree, así es como me las arreglé para hacerlo. Por favor, avíseme si hice algo mal o si me olvido de algo, ya que no estoy familiarizado con la administración de control de fuente.

  1. Fui al botón de terminal en el árbol de fuentes.
  2. Creé una nueva rama 'huérfana' usando el comando: 'git checkout --orphan clean-ver' donde clean-ver es el nombre de mi rama
  3. Cerré la terminal y vi que mi registro de confirmación se borró porque estaba en una nueva rama huérfana. Organice todo mi código fuente y realicé los cambios.
  4. Configuré mi repositorio bitbucket en repositorio> agregar control remoto o repositorio> configuración del repositorio> agregar.
  5. Lo cerré y presioné el botón
  6. Seleccioné mi nueva rama 'clean-ver' y dije que estaba bien.

Cuando verifiqué bitbucket, parece que esto pareció haber funcionado y descartó mi historial de confirmaciones.

Espero que esto ayude a alguien.

ThinkBonobo
fuente