Hoe kan ik samenvoegen van meerdere commits op een andere tak als een enkele geplette plegen?

Ik heb een remote Git server, hier is het scenario dat ik wil uitvoeren:

  • Voor elke bug / eigenschap die ik maak een ander Git tak

  • Ik blijf op het plegen van mijn code in die Git tak met niet-officiële Git berichten

  • In top repository moeten we doen een te plegen voor een bug met de officiële Git bericht

Dus hoe kan ik samenvoegen mijn afslag naar remote branch, zodat ze gewoon één commit voor al mijn check-ins (ik wil zelfs te voorzien commit boodschap voor deze)?


Antwoord 1, Autoriteit 100%

Stel dat uw bug fix tak is vernoemd naar bugfixen u wilt samenvoegen in master

git checkout master
git merge --squash bugfix
git commit

Dit zal alle commits te nemen van de bugfixtak, squash ze in 1 te plegen, en samenvoegen met je mastertak.


Toelichting

git checkout master

Switches aan uw mastertak.

git merge --squash bugfix

neemt alle commits van de bugfixtak en groepen het voor een 1 te plegen met uw huidige tak.
(geen merge commit verschijnt, je kon conflicten handmatig voordat u de volgende plegen op te lossen)

git commit

Maakt een enkele commit uit de samengevoegde wijzigingen.

Het weglaten van de -mparameter kunt u een ontwerp te wijzigen commit bericht met elk bericht van uw geplette commits vóór de afronding van je commit.


Antwoord 2, Autoriteit 7%

Wat uiteindelijk goedgekeurd dit voor mij was het een reactie waaruit blijkt dat:

git checkout main
git merge --squash feature

is het equivalent van doen:

git checkout feature
git diff main > feature.patch
git checkout main
patch -p1 < feature.patch
git add .

Als ik een feature-branch met 105(!!) commits wil samenvoegen en ze allemaal wil samenvoegen tot één, wil ik niet git rebase -i origin/masteromdat ik dat moet los samenvoegconflicten afzonderlijk op voor elkvan de tussenliggende commits (of in ieder geval degene die git zelf niet kan achterhalen). Met behulp van git merge --squashkrijg ik het resultaat dat ik wil, van een enkele commit voor het samenvoegen van een hele feature branch. En ik hoef maximaal één handmatige conflictoplossing te doen.


Antwoord 3, autoriteit 4%

Je wilt samenvoegen met de squash-optie. Dat is als je het één tak tegelijk wilt doen.

git merge --squash feature1

Als je alle branches tegelijk met enkele commits wilt samenvoegen, rebase dan eerst interactief en plet elke functie en dan octopus merge:

git checkout feature1
git rebase -i master

Squash in één commit en herhaal voor de andere functies.

git checkout master
git merge feature1 feature2 feature3 ...

Die laatste samenvoeging is een “octopus-samenvoeging” omdat het veel takken tegelijk samenvoegt.

Hopelijk helpt dit


Antwoord 4

Als je al git merge bugfixop mainhebt, kun je je merge commit samenpersen tot één met:

git reset --soft HEAD^1
git commit

Antwoord 5

Samenvoeg newFeaturebranch in mastermet een aangepaste commit:

git merge --squash newFeature && git commit -m 'Your custom commit message';

Als u dat in plaats daarvan doet

git merge --squash newFeature && git commit

krijg je een commit bericht dat alle newFeaturetak commits, die u kunt aanpassen.

ik het uitleggen grondig hier: https://youtu.be/FQNAIacelT4


Antwoord 6

Ik weet dat deze vraag gaat niet over Github specifiek, maar aangezien Github is zo veel gebruikt en dit is het antwoord dat ik zocht, ik zal het hier delen.

Github heeft de mogelijkheid om squash samenvoegingen uit te voeren, afhankelijk van de merge opties ingeschakeld voor de repository.

Als squash samenvoegingen zijn ingeschakeld, is de optie “Squash en merge” moet worden weergegeven in het dropdown-menu onder de “Merge” knop.


Antwoord 7

Stel dat u heeft gewerkt in functie / task1 met meerdere commits.

  1. Ga naar uw project tak (project / my_project)

    git checkout project/my_project
    
  2. Een nieuwe tak (functie / task1_bugfix)

    git checkout -b feature/task1_bugfix
    
  3. Samenvoegen met de --squashoptie

    git merge --squash feature/task1
    
  4. Een enkele commit

    git commit -am "add single comments"
    
  5. Duw je tak

    git push --set-upstream origin feature/task1_bugfix
    

Antwoord 8

Als u uw lokale afdeling squash voordat deze in te drukken:

  1. de kassa het filiaal in kwestie te werken aan als dit nog niet is uitgecheckt.

  2. Zoek de sha van de oudste commit die je wilt bewaren.

  3. Maak/check een nieuwe branch (tmp1) van die commit.

    git checkout -b tmp1 <sha1-of-commit>

  4. Samenvoeg de originele branch in de nieuwe en plettend.

    git merge --squash <original branch>

  5. Bevestig de wijzigingen die zijn gemaakt door de samenvoeging, met een samenvattend vastleggingsbericht.

    git commit -m <msg>

  6. Bekijk de originele tak die je wilt pletten.

    git checkout <branch>

  7. Reset naar de originele commit sha die je wilt behouden.

    git reset --soft <sha1>

  8. Rebase deze branch op basis van de nieuwe tmp1-branch.

    git rebase tmp1

  9. Dat is het – verwijder nu de tijdelijke tmp1-tak zodra je zeker weet dat alles in orde is.


Antwoord 9

Voor Git

Maak een nieuwe functie

via Terminal/Shell:

git checkout origin/feature/<featurename>
git merge --squash origin/feature/<featurename>

Hiermee wordt het niet vastgelegd, u kunt het eerst bekijken.

Verbind en beëindig dan de feature van deze nieuwe branch, en verwijder/negeer de oude (degene waarop je hebt ontwikkeld).


Antwoord 10

git checkout YOUR_RELEASE_BRANCH
git pull
git checkout -b A_NEW_BRANCH
git merge --squash YOUR_BRANCH_WITH_MULTIPLE_COMMITS
git commit -am "squashing all commits into one"
git push --set-upstream origin A_NEW_BRANCH

Antwoord 11

Als je een foutmelding krijgt: Vastleggen is niet mogelijk omdat je niet-samengevoegde bestanden hebt.

git checkout master
git merge --squash bugfix
git add .
git commit -m "Message"

alle conflictbestanden gerepareerd

git add . 

je zou ook

. kunnen gebruiken

git add [filename]

Antwoord 12

Uw feature-filiaal wordt gedaan en klaar om te committeren aan de meester, ontwikkelen of andere doeltak met slechts één commit

  • Ga naar Merge Branch: Git Checkout Master & Amp; & Amp; git pull
  • Maak een werktak van je schone lokale Master: Git Checkout -B Werk
  • Merge Squash Your Feature Branch op het werk: Git Merge –Squash Your_Feature_Branch.
  • Commiten met standaard of een nieuw bericht: Git Commit (met een specifiek of standaardbericht)
  • Ga terug naar uw functie Branch: Git Checkout Your_Feature_Branch
  • Point Your Feature Branch to Work Dir: Git Reset –Hard Work
  • Verifiëren, maar u bent klaar om te duwen: Git Push -F
  • Ruim de werktak op indien nodig op

Vervang Master met uw doelfiliaal: ontwikkelen enzovoort

  • Het is niet nodig om op te geven hoeveel verbindingen van uw master in uw functie-filiaal. Git zorgt voorzichtig *

Antwoord 13

Neem de naam aan van de tak waar u meerdere commits hebt gemaakt, Bugfix / 123 wordt genoemd en u wilt deze commits pashelen.
Maak eerst een nieuw filiaal van ontwikkelen (of wat de naam van uw repo is). Neem aan dat de naam van de nieuwe tak Bugfix / 123_UP wordt genoemd. Afrekenen Deze tak in Git Bash –

  • git fetch
  • Git Checkout Bugfix / 123_UP
  • Git Merge Bugfix / 123 –Squash
  • git commit -m “uw bericht”
  • Git Push Origin Bugfix / 123_UP

Nu zal dit filiaal slechts één commit hebben met al uw wijzigingen erin.


Antwoord 14

U kunt gebruikmaken van gereedschap die ik heb gemaakt om dit proces gemakkelijker te maken: git-squash . Bijvoorbeeld om alle commits te pletten op de functie Branch die is vertakt vanuit Master Branch, schrijf:

git squash master
git push --force

Antwoord 15

Gebruik

git status 

om te controleren wat er aan de hand is.

Dan

git checkout master 
git merge --squash bugfix
git add (add which files you want or use wildcard command like ".")

Dan

git commit -m "message"

En nu last but not least

git push -u origin master

Hier kan origineen andere afstandsbediening zijn die u verkiest.

Other episodes