Github agrega un repositorio como una bifurcación de un clon existente

21

Entonces tengo un repositorio git que cloné desde una fuente aguas arriba en ghithub. Le hice algunos cambios (que no están comprometidos y en la rama maestra). Lo que quiero hacer es insertar mis cambios en mi página de github como una nueva rama y que github todavía lo vea como una bifurcación.

¿Es eso posible? Soy bastante nuevo en git y github. ¿Mi pregunta tenía sentido?

La forma más fácil en la que puedo pensar (que estoy seguro es la forma más aproximada) es bifurcar el repositorio en github. Clonarlo localmente en un directorio diferente. Agregue el repositorio de origen ascendente. Crea una rama en ese nuevo repositorio bifurcado. Copie mis cambios de código a mano en el nuevo repositorio local. Y luego empujarlo de vuelta a mi github.

¿Es este un caso de uso común que hay una manera más simple de hacerlo sin duplicar directorios?

Supongo que estoy preguntando aquí en lugar de SO ya que estoy en Linux usando la línea de comandos git y la gente aquí da mejores respuestas imo =]

Falmarri
fuente
Supongo que esto es técnicamente sobre el tema, pero podría ser mejor en otros lugares, ya que parece ser una pregunta fundamental
Michael Mrozek

Respuestas:

22

Puede hacerlo todo desde su repositorio existente (no es necesario clonar la bifurcación en un nuevo repositorio (local), crear su rama, copiar sus confirmaciones / cambios, etc.).

  1. Prepara tus commits para ser publicados.

    Refinar cualquier compromiso local existente (por ejemplo, con git commit --amendy / o git rebase --interactive).

    Confirme cualquiera de los cambios no confirmados que desea publicar (no estoy seguro de si quiere decir que tiene algunos compromisos en su maestro local y algunos cambios no confirmados, o simplemente algunos cambios no confirmados; por cierto, los cambios no confirmados no son "en un rama ", están estrictamente en su árbol de trabajo).

    Cambie el nombre de su rama maestra para darle el nombre que desea para su "nueva rama". Esto no es estrictamente necesario (puede pasar de una rama a otra), pero probablemente reducirá la confusión a largo plazo si su rama local y la rama en su bifurcación GitHub tienen el mismo nombre.

    git branch -m master my-feature
    
  2. Bifurca el repositorio GitHub ascendente
    (p. Ej.) github.com:UpstreamOwner/repostory_name.gitComo
    (p github.com:YourUser/repository_name.git. Ej . ) .

    Esto se hace en el sitio web de GitHub (o un "cliente" que utiliza las API de GitHub), no hay comandos locales de Git involucrados.

  3. En su repositorio local (el que fue clonado originalmente desde el repositorio GitHub ascendente y tiene sus cambios en su maestro ), agregue su repositorio fork como control remoto:

    git remote add -f github github.com:YourUser/repository_name.git
    
  4. Empuje su rama a su repositorio de fork en GitHub.

    git push github my-feature
    
  5. Opcionalmente, cambie el nombre de los controles remotos para que su bifurcación se conozca como "origen" y el ascendente como "ascendente".

    git remote rename origin upstream
    git remote rename github origin
    

    Una razón para cambiar el nombre de los controles remotos sería porque desea poder usarlos git pushsin especificar un repositorio (el valor predeterminado es "origen").

Chris Johnsen
fuente
Funcionó sin problemas, pero cuando creas el control remoto de github, creo que te estás perdiendo el "https: //" en la URL de Github
jesjimher
1
@jesjimher: Las "URL" en esta publicación usan la "sintaxis similar a scp" que usa SSH, no HTTP (S). También necesitaría cambiar los dos puntos a una barra inclinada para usarlos como URL HTTP (S) (suponiendo que el servidor admita ambos sin cambios adicionales en el espacio de nombres, lo que hace GitHub).
Chris Johnsen el
Vaya, tienes razón, Chris, había escrito mal el colon como una barra oblicua, y por lo tanto no me funcionó a menos que agregue "https". Perdón por el ruido ...
jesjimher
En el Paso 4, usar la -uopción puede hacer que su sucursal local my-feature rastree la misma sucursal remota origin/my-feature. El comando es:git push -u github my-feature
YaOzI
Eso es genial. ¡Lo único que tuve que cambiar fue la dirección de Github!
Tico
0

Hay una herramienta: hub

hubes una herramienta de línea de comandos que se ajusta gitpara ampliarla con funciones y comandos adicionales que facilitan el trabajo con GitHub

Ahora usted puede:

# cd to a cloned repo with uncommited changes
git checkout -b feature
git commit -am 'done with feature'
git fork
git push YOUR_USER feature
# git pull-request
Evgeny Vereshchagin
fuente