Ho effettuato diversi commit su file diversi, ma finora vorrei inviare al mio repository remoto solo un commit specifico.
È possibile?
Ho effettuato diversi commit su file diversi, ma finora vorrei inviare al mio repository remoto solo un commit specifico.
È possibile?
Risposte:
Per eseguire il push up attraverso un determinato commit, puoi scrivere:
git push <remotename> <commit SHA>:<remotebranchname>
purché <remotebranchname>
esista già sul telecomando. (In caso contrario, è possibile utilizzare git push <remotename> <commit SHA>:refs/heads/<remotebranchname>
per crearlo automaticamente.)
Se si desidera inviare un commit senza eseguire il push di commit precedenti, è necessario innanzitutto utilizzare git rebase -i
per riordinare i commit.
git push <remotename> <commit SHA>:<remotebranchname>
lavori. il trucco è combinarlo con git rebase -i
per spostare il commit desiderato come primo commit e specificare quel commit-sha
git push <remotename> <commit SHA>:refs/heads/<new remote branch name>
. Successivamente, premi come descritto nella risposta.
git push origin HEAD~1:master
.
-f
bandiera.
Le altre risposte mancano sulle descrizioni riordinanti.
git push <remotename> <commit SHA>:<remotebranchname>
spingerà un singolo commit, ma quel commit deve essere il PIÙ VECCHIO dei tuoi commit locali, senza push, da non confondere con il commit top, first o tip, che sono tutte descrizioni ambigue secondo me. Il commit ha bisogno del più vecchio dei tuoi commit, vale a dire il più lontano dal tuo commit più recente. Se non è il commit più vecchio, verranno inviati tutti i commit dal tuo SHA più vecchio, locale e non spinto allo SHA specificato. Per riordinare i commit utilizzare:
git rebase -i HEAD~xxx
Dopo aver riordinato il commit, puoi tranquillamente inviarlo al repository remoto.
Per riassumere, ho usato
git rebase -i HEAD~<number of commits to SHA>
git push origin <post-rebase SHA>:master
per inviare un singolo commit al mio ramo master remoto.
Riferimenti:
Guarda anche:
Suggerirei di usare git rebase -i
; sposta il commit che vuoi spingere in cima ai commit che hai fatto. Quindi utilizzare git log
per ottenere lo SHA del commit rinnovato, verificarlo e inviarlo. Il rebase assicurerà che tutti gli altri tuoi commit siano ora figli di quello che hai spinto, quindi anche le future spinte funzioneranno bene.
git log
passo?
Cherry-pick funziona meglio rispetto a tutti gli altri metodi mentre si spinge un commit specifico.
Il modo per farlo è:
Crea una nuova filiale -
git branch <new-branch>
Aggiorna il tuo nuovo ramo con il tuo ramo di origine -
git fetch
git rebase
Queste azioni assicureranno che tu abbia esattamente le stesse cose della tua origine.
Scegli sha id
quello che vuoi fare push -
git cherry-pick <sha id of the commit>
Puoi farlo sha id
correndo
git log
Spingilo alla tua origine -
git push
Corri gitk
per vedere che tutto sembra nello stesso modo in cui volevi.
git rebase -i
sarà la soluzione ideale come suggerito nelle soluzioni sopra. Cherry Pick deve essere utilizzato solo quando si desidera duplicare il commit.
Credo che dovresti "tornare indietro" a quel commit e poi spingerlo. Oppure è possibile cherry-pick
eseguire il commit in un nuovo ramo e inviarlo al ramo sul repository remoto. Qualcosa di simile a:
git branch onecommit
git checkout onecommit
git cherry-pick 7300a6130d9447e18a931e898b64eefedea19544 # From the other branch
git push origin {branch}
cherry-pick
il commit che desideri.
Puoi anche, in un'altra directory: