Sono nuovo di Git, quindi sentiti libero di trattarmi come un principiante.
Il nostro flusso di lavoro è tale. Abbiamo un ramo chiamato al dev
quale posso raggiungere origin/dev
. Quando facciamo le modifiche, creiamo un ramo fuori da dev:
git checkout -b FixForBug origin / dev
Ora ho un ramo chiamato FixForBug
che sta monitorando (penso che sia la parola giusta) origin/dev
. Quindi, se faccio un git pull
, porterà nuovi cambiamenti da origin/dev
cui è fantastico. Ora, quando ho finito con la mia correzione, spingo in un ramo remoto chiamato la stessa cosa.
Per prima cosa abbasso tutte le modifiche origin/dev
e faccio un rebase:
git pull --rebase
Quindi invio le modifiche a un ramo remoto con lo stesso nome:
git push origin FixForBug
Ora, c'è un ramo sul server remoto e posso creare una richiesta pull per l'approvazione e la fusione di quella modifica nel ramo dev. Non spingo mai niente a origin/dev
me stesso. Immagino che questo sia un flusso di lavoro piuttosto comune.
La prima volta che faccio un git push
, funziona benissimo e crea il ramo remoto. Tuttavia, se premo una seconda volta (diciamo durante la revisione del codice, qualcuno segnala un problema), ottengo il seguente errore:
errore: impossibile inviare alcuni riferimenti a ' https://github.limeade.info/Limeade/product.git ' suggerimento: gli aggiornamenti sono stati rifiutati perché la punta del ramo corrente è dietro suggerimento: la sua controparte remota. Integra le modifiche remote (es. Suggerimento: 'git pull ...') prima di premere di nuovo. suggerimento: vedere la "Nota sull'avanzamento rapido" in "git push --help" per i dettagli.
Tuttavia, se lo faccio git status
dice che sono in anticipo di origin/dev
1 commit (il che ha senso) e se seguo il suggerimento e corro git pull
, dice che tutto è aggiornato. Penso che sia perché sto spingendo verso un ramo diverso dal mio ramo a monte. Posso risolvere questo problema eseguendo:
git push -f origin FixForBug
In tal caso, invierà le modifiche al ramo remoto, dicendo (aggiornamento forzato) e tutto sembra andare bene sul ramo remoto.
Le mie domande:
Perché è -f
richiesto in questo scenario? Di solito quando stai forzando qualcosa, è perché stavi facendo qualcosa di sbagliato o almeno contro la pratica standard. Sto bene facendo questo, o rovinerà qualcosa nel ramo remoto o creerà una seccatura per chi alla fine dovrà unire le mie cose in sviluppo?
git pull origin FixForBug
prima di spingere a quello? Ok ha senso. Sentiti libero di aggiungere come risposta!