Sobes.tech
Middle

Hoe voer je het overschrijven van wijzigingen uit op de hoofdbranch (main branch)?

sobes.tech AI

Antwoord van AI

Gebruik git revert of git rebase (in "interactieve" modus, of git rebase --onto voor complexere scenario's) gevolgd door git push -f.

git revert maakt een nieuwe commit die de wijzigingen van de opgegeven commits ongedaan maakt. Dit is een veiligere optie omdat de geschiedenis behouden blijft.

# Laatste commit ongedaan maken
git revert HEAD
# Een specifieke commit ongedaan maken op basis van de hash
git revert <commit-hash>
# Een bereik van commits ongedaan maken (behalve de laatste)
git revert <begin-hash>..<eind-hash>
# Een bereik van commits ongedaan maken (inclusief beide)
git revert -n <begin-hash>^..<eind-hash>
# Wijzigingen ongedaan maken door ze in één keer toe te passen zonder aparte commits voor elke
git revert -n <commit-hash-of-bereik>
# De gemaakte commit toepassen
git commit -m "Revert changes"

git rebase stelt je in staat om de geschiedenis van commits te herschrijven. Het kan worden gebruikt om commits te verwijderen, samen te voegen of de volgorde te wijzigen. Voorzichtigheid is geboden, vooral op gedeelde takken.

# Start een interactieve rebase voor de laatste N commits
git rebase -i HEAD~N
# In de geopende editor, verander 'pick' in 'drop' naast de commits die je wilt verwijderen.
# Sla het bestand op en sluit het.

# Scenario met rebase --onto: verplaats commits A, B, C van de feature-branch naar master,
# waarbij commit D wordt genegeerd, die op feature stond.
# Huidige branch: feature
# X -- Y -- Z -- D -- A -- B -- C (feature)
#             /
#            W (master)
# Doel: X -- Y -- Z -- W -- A -- B -- C (master)
git rebase --onto master D feature
# Waar:
# master - doelbranch waar naartoe wordt verplaatst
# D - commit tot waar de verplaatsing wordt uitgesloten op de bronbranch
# feature - bronbranch waarvan de commits worden verplaatst

Na het toepassen van git revert of git rebase op de hoofdbranch, is een geforceerde push (git push -f of git push --force-with-lease) nodig, omdat de lokale geschiedenis verschilt van de remote.

# Geforceerde push na rebase
git push -f origin main
# Veiliger geforceerde push
git push --force-with-lease origin main

Belangrijk: Het herschrijven van de geschiedenis op de gedeelde branch (main) wordt sterk afgeraden, omdat dit het werk van andere ontwikkelaars kan verstoren die al met de vorige versie van de geschiedenis hebben gesynchroniseerd. Het is beter om git revert te gebruiken. git rebase op de hoofdbranch mag alleen in uitzonderlijke gevallen en met volledige kennis van de gevolgen worden toegepast, meestal na overleg met het hele team.