Push si impegna su un altro ramo

È ansible commettere e spingere i cambiamenti da un ramo all’altro.

Supponiamo che abbia eseguito delle modifiche a BRANCH1 e vogliale inviarle a BRANCH2 .

Da BRANCH1 , è valido fare:

git push origin **BRANCH2** 

E quindi ripristinare BRANCH1?

Funzionerà quasi.

Quando si preme su un ramo non predefinito, è necessario specificare il riferimento sorgente e il riferimento objective:

 git push origin branch1:branch2 

O

 git push  : 

Certamente, anche se funzionerà solo se è un avanzamento veloce di BRANCH2 o se lo forzate. La syntax corretta per fare una cosa del genere è

 git push  : 

Vedi la descrizione di un “refspec” nella pagina man di git push per maggiori dettagli su come funziona. Si noti inoltre che sia la forza che il reset sono operazioni che “riscrivono la cronologia” e non dovrebbero essere tentate dai deboli di cuore a meno che non siate assolutamente sicuri di sapere cosa state facendo rispetto a qualsiasi repository remoto e altro persone che hanno biforcazioni / cloni dello stesso progetto.

Nel mio caso ho avuto un commit locale, che non è stato spinto origin\master , ma è stato assegnato al mio ramo master locale. Questo commit locale dovrebbe ora essere trasferito su un altro ramo.

Con Git Extensions puoi fare qualcosa del genere:

  • (Crea se non esistente e) controlla il nuovo ramo, dove vuoi spingere il tuo commit.
  • Seleziona il commit dalla cronologia, che dovrebbe essere impegnato e spinto a questo ramo.
  • Fai clic con il tasto destro del mouse e seleziona Commessa selezione selva .
  • Premere successivamente il pulsante di selezione Cherry .
  • Il commit selezionato viene applicato al tuo ramo estratto. Ora impegnarsi e spingerlo.
  • Controlla il tuo vecchio ramo, con il commit difettoso.
  • Hard reset a questo ramo fino al penultimo commit, dove tutto era ok (sii consapevole di cosa stai facendo qui!). Puoi farlo facendo clic con il tasto destro del mouse sul penultimo commit e seleziona Reimposta ramo corrente qui . Conferma l’opperazione, se sai cosa stai facendo.

Potresti farlo anche sulla riga di comando di GIT . Esempio copiato da David Christensen :

Penso che troverete git cherry-pick + git reset per essere un stream di lavoro molto più veloce:

Usando il tuo stesso scenario, con “feature” come il ramo con il commit più in alto non corretto, sarebbe molto più facile farlo:

git checkout master
git cherry-pick feature
git checkout feature
git reset --hard HEAD^

Salva un bel po ‘di lavoro, ed è lo scenario che git cherry-pick stato progettato per gestire.

Noterò anche che questo funzionerà anche se non è il commit più in alto; hai solo bisogno di un impegno per l’argomento di cherry-pick, tramite:

git checkout master
git cherry-pick $sha1
git checkout feature
git rebase -i ... # whack the specific commit from the history