/ / Come possono due rami essere "collegati" in git? - git, github

Come possono due rami diventare "collegati" in git? - GIT, GITUB

L'altro giorno è successo qualcosa di molto strano che non posso spiegare, che quasi sicuramente si traduce in una mancanza che ho nella comprensione di git e GitHub.

Sto lavorando a un progetto su GitHub usando il Flusso GitHub modello. C'erano due rami di funzioni su cui si lavorava attivamente: li chiameremo A e B. Entrambi stavano progredendo felicemente con i propri commit, fino a quando uno di loro non ha letto:

Unisci il ramo di monitoraggio remoto "origine / b in b"

Da quel momento, la richiesta pull peril ramo A mostrava i commit sia per A che per B. Non avevo notato che, e unendo la richiesta pull per A in master, contemporaneamente chiudeva la richiesta pull per B in GitHub. Guardando indietro alla richiesta pull per B dopo ha chiuso, sembrava che avesse "perso" tutti i suoi commit tranne due.

Come è successo? Quali comandi git possono collegare branch (e PR) in questo modo? Mi piacerebbe riuscire a riproporlo a partire da un repository pulito come esempio di apprendimento per il team.

risposte:

0 per risposta № 1

Come sono arrivati ​​i commit di B in A?

Sembra che tu abbia estratto o unito le modifiche dal ramo B al ramo A, quindi hai spinto il ramo A (che ora contiene i commit da A e B) in GitHub. Ecco un esempio minimo possibile:

git clone <your repo clone url>; cd <reponame>
git commit --allow-empty -m "first commit guarantees shared history"
git checkout -b B
touch bar; git add bar; git commit -m "commit on branch B"
git push origin B
git checkout master
git checkout -b A
touch foo; git add foo; git commit -m "Commit on branch A"
git push origin A
# Create PR from A into master using GitHub UI
git status
On branch A
nothing to commit, working directory clean
git merge B
# your editor opens and you make a commit
git push origin A

Ora tutti i commit che erano sul ramo B quando hai digitato git merge B siamo fuse nel ramo A. Quando li spingi nel ramo A, verranno visualizzati nella richiesta pull da A al master, poiché GitHub presume che i successivi commit in un ramo debbano indirizzare il feedback di revisione su un PR.

Perché il PR da B a master è stato chiuso?

Anche se probabilmente sei abituato a unire PRil pulsante nell'interfaccia utente, eseguendo un'unione sulla riga di comando, fa esattamente la stessa cosa. Il modo in cui GitHub decide se un PR è stato unito manualmente o meno è quello di confrontare gli ID dei commit nel PR con gli ID dei commit nel ramo con cui hai creato il PR (in questo caso, master). Poiché tutti i commit dal ramo B sono stati uniti in master come parte del PR dal ramo A, sembrava esattamente lo stesso a GitHub come se il ramo B fosse stato unito a mano, quindi il PR era contrassegnato come "unito" e non più si presenta come "aperto".

Quali comandi git possono "collegare" rami / PR?

  • git merge otherbranch; git push remotename PRbranch
  • git pull remotename branchname; git push remotename PRbranch
  • git cherry-pick <commit range>; git push remotename PRbranch se selezioni tutti gli commit da qualche altra PR
  • git apply <patchfile>; git push remotename PRbranch se per qualche motivo l'intero contenuto di un'altra PR ti è stato inviato via e-mail come patch

Fondamentalmente, qualsiasi comando che porta commit di un altro ramo nella tua storia ha il potenziale per causare il comportamento che hai visto.