Zoeken…


Opmerkingen

Het is vermeldenswaard dat enscenering weinig te maken heeft met 'bestanden' zelf en alles met de veranderingen binnen elk gegeven bestand. We stapelen bestanden die wijzigingen bevatten, en git volgt de wijzigingen als commits (zelfs wanneer de wijzigingen in een commit in meerdere bestanden worden aangebracht).

Het onderscheid tussen bestanden en commits lijkt misschien klein, maar het begrijpen van dit verschil is fundamenteel voor het begrijpen van essentiële functies zoals cherry-pick en diff. (Zie de frustratie in opmerkingen over de complexiteit van een geaccepteerd antwoord dat cherry-pick voorstelt als hulpmiddel voor bestandsbeheer .)

Wat is een goede plek om concepten uit te leggen? Staat het in opmerkingen?

Sleutelbegrippen:

Een bestand is de meest voorkomende metafoor van de twee in informatietechnologie. Best practice dicteert dat een bestandsnaam niet verandert als de inhoud ervan verandert (met een paar erkende uitzonderingen).

Een commit is een metafoor die uniek is voor broncodebeheer. Commits zijn wijzigingen die verband houden met een specifieke inspanning, zoals een bugfix. Commits bevatten vaak meerdere bestanden. Een enkele, kleine bugfix kan aanpassingen in sjablonen en css in unieke bestanden met zich meebrengen. Terwijl de wijziging wordt beschreven, ontwikkeld, gedocumenteerd, beoordeeld en geïmplementeerd, kunnen de wijzigingen in de afzonderlijke bestanden worden geannoteerd en als één eenheid worden verwerkt. De enige eenheid in dit geval is de commit. Even belangrijk is dat de focus op alleen de commit tijdens een review ervoor zorgt dat de ongewijzigde coderegels in de verschillende getroffen bestanden veilig worden genegeerd.

Een enkel bestand opvoeren

Om een bestand voor het plegen van een podium te stapelen, voer je uit

git add <filename>

Alle wijzigingen in bestanden organiseren

git add -A
2.0
git add .

In versie 2.x, git add . zal alle wijzigingen in bestanden in de huidige map en alle bijbehorende submappen opvoeren. In 1.x worden echter alleen nieuwe en gewijzigde bestanden gefaseerd, geen verwijderde bestanden .

Gebruik git add -A , of het gelijkwaardige commando git add --all , om alle wijzigingen in bestanden in elke versie van git op te zetten.

Fase verwijderde bestanden

git rm filename

Gebruik de vlag --cached om het bestand uit git te verwijderen zonder het van schijf te verwijderen

git rm --cached filename

Unstage een bestand dat wijzigingen bevat

git reset <filePath>

Interactieve toevoeging

git add -i (of --interactive ) geeft je een interactieve interface waar je de index kunt bewerken, om voor te bereiden wat je in de volgende commit wilt hebben. U kunt wijzigingen aan hele bestanden toevoegen en verwijderen, niet-bijgehouden bestanden toevoegen en bestanden verwijderen die niet worden gevolgd, maar u kunt ook een subsectie van wijzigingen selecteren die u in de index wilt opnemen, door delen van de toe te voegen wijzigingen te selecteren, die delen te splitsen of zelfs de diff te bewerken . Veel grafische commit-tools voor Git (zoals bijv. Git git gui ) hebben een dergelijke functie; dit is misschien gemakkelijker te gebruiken dan de versie van de opdrachtregel.

Het is erg handig (1) als je veranderingen in de werkmap hebt verward die je in afzonderlijke commits wilt plaatsen, en niet allemaal in één enkele commit (2) als je midden in een interactieve rebase zit en ook wilt splitsen grote inzet.

$ git add -i
           staged     unstaged path
  1:    unchanged        +4/-4 index.js
  2:        +1/-0      nothing package.json

*** Commands ***
  1: status       2: update       3: revert       4: add untracked
  5: patch        6: diff         7: quit         8: help
What now>

De bovenste helft van deze uitvoer toont de huidige status van de index opgesplitst in gefaseerde en niet-gefaseerde kolommen:

  1. index.js heeft 4 regels toegevoegd en 4 regels verwijderd. Het wordt momenteel niet opgevoerd, omdat de huidige status meldt "ongewijzigd". Wanneer dit bestand geënsceneerd wordt, wordt het +4/-4 bit overgebracht naar de gefaseerde kolom en zal de niet-gefaseerde kolom "niets" lezen.
  2. package.json heeft één regel toegevoegd en is geënsceneerd. Er zijn geen verdere wijzigingen omdat het is opgevoerd zoals aangegeven door de regel "niets" onder de niet-opgevoerde kolom.

De onderste helft laat zien wat u kunt doen. Voer een cijfer (1-8) of een letter ( s , u , r , a , p , d , q , h ) in.

status toont output identiek aan het bovenste gedeelte van de output hierboven.

update kunt u verdere wijzigingen aanbrengen in de geënsceneerde commits met extra syntaxis.

revert zal de geënsceneerde commit-informatie terugzetten naar HEAD.

add untracked kunt u bestandspaden toevoegen die eerder niet zijn gevolgd door versiebeheer.

patch maakt het mogelijk om één pad te selecteren uit een uitgang vergelijkbaar met status voor verdere analyse.

diff toont wat er zal worden gepleegd.

quit verlaat het commando.

help biedt verdere hulp bij het gebruik van deze opdracht.

Voeg wijzigingen toe door hunk

Je kunt zien welke "stukjes" van het werk zouden worden opgevoerd voor commit met behulp van de patch-vlag:

git add -p

of

git add --patch

Dit opent een interactieve prompt waarmee u naar de verschillen kunt kijken en u kunt beslissen of u ze wilt opnemen of niet.

Stage this hunk [y,n,q,a,d,/,s,e,?]?
  • y stage deze hunk voor de volgende commit
  • n plaats deze hunk niet voor de volgende commit
  • q stoppen; stel deze hunk of een van de resterende hunks niet op
  • een fase deze hunk en alle later hunks in het bestand
  • d voer deze hunk of een van de latere delen in het bestand niet uit
  • g selecteer een stuk om naar toe te gaan
  • / zoeken naar een stuk dat overeenkomt met de gegeven regex
  • j laat deze hunk onbeslist, zie volgende onbesliste hunk
  • J laat deze hunk onbeslist, zie volgende hunk
  • k laat deze hunk onbeslist, zie vorige onbesliste hunk
  • K laat deze hunk onbeslist, zie vorige hunk
  • s splitst de huidige hunk in kleinere hunks
  • e bewerk de huidige hunk handmatig
  • ? help afdrukken

Dit maakt het gemakkelijk om veranderingen te vangen die u niet wilt doorvoeren.

Je kunt dit ook openen via git add --interactive en p selecteren.

Gefaseerde wijzigingen weergeven

Om de hunks weer te geven die zijn geënsceneerd voor commit:

git diff --cached


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow