Jag har använt GitHub under ganska lång tid nu och brukade vanligtvis trycka på mina funktionsgrenar och sedan starta en Pull Request som jag själv slog ihop. Jag tyckte att det hjälpte mig att hålla reda på var jag slog samman filialer.
Men nyligen har jag läst mer och mer om hur Git fungerar och jag insåg att jag kan använda merge-commits för att hänvisa till när jag slog samman filialer.
Så vad ska jag göra när jag slår samman en funktionsgren till master:
Utför en merge-commit på master och tryck sedan uppströms ELLER Tryck på den lokala grenen och starta en Pull-begäran?
Jag har läst Presenterar Pull-förfrågningar för ett team för två personer – slå ihop mina egna förfrågningar? och Vad är arbetsflödet med 2 personer i ett projekt och Ska jag öppna pull-förfrågningar från en filial på det officiella repo eller min gaffel? men ingen av dem verkar svara på det jag letar efter.
Kommentarer
- Vad tycker du exakt saknas av dessa svar?
- Den första talar om det ur den meningen att pull-begäranden är avsedda att vara peer-reviewed. Den andra erbjuder ett arbetsflöde. Den tredje är inte ' inte ens relaterad.
- Jag tittar på detta från en bästa praxis eller Hur man underhåller en bra git-historik synvinkel.
- När jag slår samman en PR gör jag det genom att slå samman filialen lokalt. Detta gör att jag kan se till att sammanslagningen gäller rent och att köra tester igen innan jag publicerar resultatet. GitHub ' s Pull Requests är bara en formalisering av detta arbetsflöde, Git själv har inte ett koncept för PR.
- När en PR slås samman skapar den en sammanslagning begå på master, så jag tror inte ' att detta gör någon skillnad i git-historien. Således tror jag inte ' att det finns någon anledning att använda den ena eller den andra förutom din personliga preferens mellan kommandoraden och Github UI.
Svar
git-merge-mekanism:
Med git merge feature
medan du är på master slås grenen feature
samman till master
och producerar en merge-commit
(om grenen inte kan spola framåt) i git-historiken. För att tvinga fram en merge-commit
, använd alternativet --no-ff
med merge
.
Merge Pull Request-mekanism:
När vi startar en Pull Request på GitHub skapas en GitHub Issue
där människor kan prata och diskutera åtagandena i PR innan de slås ihop. När en PR slås samman på GitHub gör den exakt samma sak som git merge feature
.
Vad ska jag göra ?
Så vad historien beträffar är det ingen skillnad mellan de två.
Och vad beträffar bidrag kommer dina bidragsgivare inte att ha att göra något annorlunda för de två situationerna. De är desamma (minus den trevliga lilla chatten).
Bästa praxis:
Och jag kunde inte hitta bästa praxis, men logiken säger att PRs inte är mycket användbara om det bara finns en enda bidragsgivare till ett förvar.
@lxrec och @amon hjälpte mig att nå denna slutsats.
Kommentarer
- Tips:
git merge
kanske inte spelar in en sammanslagningsåtgärd om den kan göra ett ”snabbspolning framåt”. För att tvinga en sammanslagning kan du lägga till alternativet--no-ff
. - Jag föredrar att göra git-merge på lokal snarare än att göra det på githuib.com, om jag skulle behöva något sådant på github.com Jag skulle föredra att inte göra direkt på mastergrenen, jag skulle hellre ta en icke-masterfilial som först kan ställas in i iscensättningsläge innan den görs tillgänglig för produktion.
Svar
Som Ashhar sa, tekniskt och historiskt sett är det ingen skillnad. litet team jag föredrar att slå samman direkt istället för det extra steget att skapa en PR. Men när en funktion behöver granskas / återkopplas eller när den är en WIP och mer än en person kommer att arbeta med den tenderar jag att öppna en PR och lägga till en lista över uppgifter till PR: s beskrivning.
Observera att git merge
kan använda snabbspolning framåt om det inte finns några ändringar i mastern, så du kanske vill använda git merge --no-ff
. Jag brukar inte göra det.
Så sammanfattningsvis, använd bara PR s när du behöver diskussion. Annars går det bara att slå samman direkt.
Kommentarer
- Det ' är också värt att nämna att diskussionen och feedbacken på en pull-begäran kan kommer från automatiserade källor såväl som teammedlemmar. Om du har en CI-server inställd kan den ge bygg- och testresultat så att du aldrig slår samman något som bryter byggnaden på master.