Hoe u uw laatste N Git-commits kunt combineren

Git Commands

Commit Squashing beheersen in Git:

Als je aan een project werkt, kan je commitgeschiedenis vol raken met talloze kleine commits. Deze kleine commits kunnen het moeilijk maken om wijzigingen te beoordelen en de projectgeschiedenis te begrijpen.

In Git kun je je laatste N commits in één enkele commit samenbrengen, waardoor een schonere en beter beheersbare geschiedenis ontstaat. Deze gids leidt u door de stappen om dit te bereiken, waardoor uw versiebeheer efficiënter wordt.

Commando Beschrijving
git rebase -i HEAD~N Initieert een interactieve rebase van de laatste N commits.
pick Handhaaft een commit zoals deze is tijdens een interactieve rebase.
squash Combineert een commit met de vorige tijdens een interactieve rebase.
sed -i '1!s/pick/squash/' .git/rebase-merge/git-rebase-todo Vervangt automatisch 'pick' door 'squash' voor alles behalve de eerste commit in de rebase-takenlijst.
git rebase --continue Zet het rebase-proces voort na het oplossen van conflicten.
git rebase --abort Breekt het rebase-proces af en keert terug naar de staat voordat het rebase begon.
HEAD~N Verwijst naar de commit N plaatsen vóór de huidige HEAD.

Git Commit Squashing begrijpen

Het eerste script gebruikt om een ​​interactieve rebase van de laatste N commits te initiëren. In het interactieve scherm vervang je 'pick' door 'squash' voor de commits die je wilt combineren. Dit proces helpt bij het consolideren van meerdere kleinere commits in één, waardoor je commitgeschiedenis overzichtelijker en gemakkelijker te beheren wordt. Na het bewerken slaat u de editor op en sluit u deze. Als er conflicten zijn, los je deze op en ga je verder .

Het tweede script is een Bash-script dat het squashproces automatiseert. Het begint met het controleren of er een aantal commits (N) is opgegeven. Dan loopt het en toepassingen om 'pick' te vervangen door 'squash' voor alles behalve de eerste commit in de rebase-takenlijst. Dit maakt het eenvoudiger om meerdere commits te vernietigen zonder het bestand handmatig te bewerken. Ten slotte zet het het rebase-proces voort met , waarbij eventuele noodzakelijke conflictoplossingen automatisch worden afgehandeld.

Verdeel meerdere commits in één met behulp van Git Rebase

Git-opdrachten

git rebase -i HEAD~N
# Replace N with the number of commits you want to squash
# In the interactive rebase screen that appears, change 'pick' to 'squash' (or 's') for the commits you want to squash
# Save and close the editor
# Edit the commit message if needed, then save and close the editor again
# If there are conflicts, resolve them and then run
git rebase --continue
# Your last N commits are now squashed into one commit

Automatisering van commit-squashing met een shell-script

Bash-script

#!/bin/bash
if [ -z "$1" ]
then
  echo "Usage: ./squash_commits.sh <N>"
  exit 1
fi
git rebase -i HEAD~$1
# Automatically replace 'pick' with 'squash' for all but the first commit
sed -i '1!s/pick/squash/' .git/rebase-merge/git-rebase-todo
git rebase --continue

Geavanceerde Git Squashing-technieken

Een ander belangrijk aspect van het squashen van commits in Git is het omgaan met merge-conflicten die tijdens het proces kunnen ontstaan. Bij het combineren van meerdere commits kunnen wijzigingen van verschillende commits met elkaar conflicteren. Om deze conflicten op te lossen, biedt Git commando's zoals om te zien welke bestanden in conflict zijn en om ze als opgelost te markeren. Nadat je conflicten hebt opgelost, ga je verder met de rebase .

Het is ook handig om te weten hoe u een rebase kunt afbreken als er iets misgaat. Het bevel stopt het rebase-proces en brengt uw repository terug naar de vorige staat voordat de rebase begon. Dit zorgt ervoor dat u alle wijzigingen die tijdens het rebase-proces zijn aangebracht veilig ongedaan kunt maken. Het begrijpen van deze commando's kan je vermogen om complexe Git-geschiedenissen efficiënt te beheren aanzienlijk verbeteren.

  1. Wat betekent het squashen van commits?
  2. Het vernietigen van commits betekent het combineren van meerdere commits in één enkele commit om de commitgeschiedenis te vereenvoudigen.
  3. Waarom zou ik commits squashen?
  4. Het platdrukken van commits kan uw projectgeschiedenis overzichtelijker en gemakkelijker leesbaar maken, vooral als er veel kleine commits worden gebruikt.
  5. Hoe start ik een interactieve rebase?
  6. Gebruik de opdracht , waarbij N wordt vervangen door het aantal commits dat je wilt squashen.
  7. Wat betekenen 'kiezen' en 'squash' in interactieve rebase?
  8. 'Pick' houdt een commit zoals hij is, terwijl 'squash' deze combineert met de vorige commit.
  9. Hoe los ik conflicten op tijdens een rebase?
  10. Gebruik om conflicten te identificeren, deze handmatig op te lossen en vervolgens te gebruiken En .
  11. Kan ik een rebase afbreken als er iets misgaat?
  12. Ja, je kunt het gebruiken om de rebase te stoppen en terug te keren naar de vorige staat.
  13. Wat is het voordeel van het gebruik van een Bash-script voor het squashen van commits?
  14. Een Bash-script automatiseert het proces, waardoor tijd wordt bespaard en de kans op handmatige fouten wordt verkleind.
  15. Is er een manier om commits automatisch in een rebase te squashen?
  16. Ja, door een script te gebruiken om de rebase-takenlijst mee te wijzigen , kunt u 'pick' automatisch wijzigen in 'squash'.

Afronding van Git Commit Squashing

Het pletten van commits in Git is een krachtige techniek voor het behouden van een schone en leesbare projectgeschiedenis. Of u nu interactieve rebase gebruikt of automatiseert met een Bash-script, u ​​kunt meerdere commits combineren in één enkele commit, waardoor het logboek eenvoudiger te beheren is. Als u begrijpt hoe u conflicten kunt oplossen en een rebase kunt afbreken, vergroot u uw Git-vaardigheid, zodat u eventuele problemen die zich voordoen, kunt afhandelen. Het beheersen van deze opdrachten en methoden zal uw versiebeheerpraktijken aanzienlijk verbeteren.