Cum să combinați ultimele tale N Commit-uri Git

Cum să combinați ultimele tale N Commit-uri Git
Cum să combinați ultimele tale N Commit-uri Git

Stăpânirea Commit Squashing în Git:

Când lucrați la un proiect, istoricul dvs. de comitere poate deveni aglomerat cu numeroase comiteri mici. Aceste comiteri minore pot face dificilă revizuirea modificărilor și înțelegerea istoricului proiectului.

În Git, puteți strânge ultimele N comiteri într-o singură comitere, creând un istoric mai curat și mai ușor de gestionat. Acest ghid vă va ghida prin pașii pentru a realiza acest lucru, făcând controlul versiunii mai eficient.

Comanda Descriere
git rebase -i HEAD~N Inițiază o rebazare interactivă a ultimelor N comiteri.
pick Menține un commit așa cum este în timpul unei rebaze interactive.
squash Combină un commit cu cel anterior în timpul unei rebaze interactive.
sed -i '1!s/pick/squash/' .git/rebase-merge/git-rebase-todo Înlocuiește automat „pick” cu „squash” pentru toate, cu excepția primului commit din lista de lucruri de rebase.
git rebase --continue Continuă procesul de rebazare după rezolvarea conflictelor.
git rebase --abort Anulează procesul de rebazare și revine la starea de dinainte de începerea rebazei.
HEAD~N Se referă la comiterea N locuri înainte de HEAD curent.

Înțelegerea Git Commit Squashing

Primul script folosește git rebase -i HEAD~N pentru a iniția o rebase interactivă a ultimelor N comiteri. În ecranul interactiv, înlocuiți „pick” cu „squash” pentru comitările pe care doriți să le combinați. Acest proces ajută la consolidarea mai multor comiteri mai mici într-una singură, făcând istoricul de comitere mai curat și mai ușor de gestionat. După editare, salvați și închideți editorul. Dacă există conflicte, le rezolvați și continuați git rebase --continue.

Al doilea script este un script Bash care automatizează procesul de squashing. Începe prin a verifica dacă este furnizat un număr de comite (N). Apoi, rulează git rebase -i HEAD~N și utilizări sed pentru a înlocui „pick” cu „squash” pentru toți, cu excepția primului commit din lista de activități rebase. Acest lucru facilitează eliminarea mai multor comitări fără a edita manual fișierul. În cele din urmă, continuă procesul de rebazare cu git rebase --continue, gestionând în mod automat orice rezolvare a conflictelor necesare.

Squash mai multe comite într-unul singur folosind Git Rebase

Comenzi Git

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

Automatizarea Commit Squashing cu un script Shell

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

Tehnici avansate de squashing Git

Un alt aspect important al comiterilor squashing în Git este gestionarea conflictelor de îmbinare care pot apărea în timpul procesului. Când combinați mai multe comiteri, modificările de la diferite comiteri pot intra în conflict între ele. Pentru a rezolva aceste conflicte, Git oferă comenzi precum git status pentru a vedea ce fișiere sunt în conflict și git add pentru a le marca ca rezolvate. După rezolvarea conflictelor, continuați rebazarea cu git rebase --continue.

De asemenea, este util să știți cum să anulați o rebază dacă lucrurile merg prost. Comanda git rebase --abort oprește procesul de rebazare și readuce depozitul la starea anterioară înainte de începerea rebazei. Acest lucru vă asigură că puteți anula în siguranță orice modificări făcute în timpul procesului de rebazare. Înțelegerea acestor comenzi vă poate îmbunătăți semnificativ capacitatea de a gestiona eficient istoriile Git complexe.

Întrebări frecvente despre Git Commit Squashing

  1. Ce înseamnă squashing commits?
  2. Squashing commit-uri înseamnă combinarea mai multor commit-uri într-un singur commit pentru a simplifica istoricul commit-urilor.
  3. De ce ar trebui să squash comites?
  4. Squashing commit-urile poate face istoricul proiectului dvs. mai curat și mai ușor de citit, mai ales atunci când sunt utilizate multe comit-uri mici.
  5. Cum pot începe o rebază interactivă?
  6. Utilizați comanda git rebase -i HEAD~N, înlocuind N cu numărul de comiteri pe care doriți să le eliminați.
  7. Ce înseamnă „pick” și „squash” în rebase interactivă?
  8. „Pick” păstrează un commit așa cum este, în timp ce „squash” îl combină cu commit-ul anterior.
  9. Cum rezolv conflictele în timpul unei rebaze?
  10. Utilizare git status pentru a identifica conflictele, rezolvați-le manual, apoi utilizați git add și git rebase --continue.
  11. Pot anula o rebază dacă ceva nu merge bine?
  12. Da, poți folosi git rebase --abort pentru a opri rebazarea și a reveni la starea anterioară.
  13. Care este beneficiul utilizării unui script Bash pentru squashing commit-uri?
  14. Un script Bash automatizează procesul, economisind timp și reducând riscul erorilor manuale.
  15. Există o modalitate de a squash automat comiterile într-o rebase?
  16. Da, utilizând un script pentru a modifica lista de lucruri de rebase cu sed, puteți schimba automat „pick” în „squash”.

Încheierea Git Commit Squashing

Squashing commits în Git este o tehnică puternică pentru menținerea unui istoric al proiectului curat și lizibil. Indiferent dacă utilizați rebase interactivă sau automatizare cu un script Bash, puteți combina mai multe comitări într-una singură, făcând jurnalul mai ușor de gestionat. Înțelegerea modului de rezolvare a conflictelor și a renunțării la o rebază sporește competența dvs. Git, asigurându-vă că puteți gestiona orice probleme care apar. Stăpânirea acestor comenzi și metode va îmbunătăți semnificativ practicile de control al versiunilor.