Er is een door git gecontroleerde map op een server waar de hoofdbranch is uitgecheckt en een hele stapel bestanden is gewijzigd en niet vastgelegd. Is er een manier waarop ik de wijzigingen in een aparte branch kan vastleggen, zodat ik terug kan naar een schone versie?
dwz ik wil de wijzigingen van al deze personen effectief ongedaan maken, maar ze opslaan in een andere kans, zodat als die persoon hun wijzigingen wil, ze naar die branch kunnen overschakelen.
(Ja, ik weet dat dit niet is hoe git is ontworpen om te werken, maar dat is mijn situatie!) Alle ideeën worden zeer op prijs gesteld.
Antwoord 1, autoriteit 100%
Allereerst wordt het verplaatsen naar een andere vertakking in de huidige HEAD als volgt uitgevoerd:
git checkout -b newbranch
Voeg alle wijzigingen door (ervan uitgaande dat er geen nieuw toegevoegde bestanden zijn, anders git add
ze):
git commit -a
Ga terug naar de master-branch:
git checkout master
De eerder niet-gecommitteerde wijzigingen zullen allemaal in de newbranch-branch zijn en de master zal nog steeds in de staat zijn waarin deze was zonder die wijzigingen.
Antwoord 2, autoriteit 9%
U kunt uw wijzigingen altijd opbergen.
git stash
git checkout -b bravenewmaster
git stash apply
Houd er ook rekening mee dat als je je commit aan de “verkeerde” branch, je die branch altijd terug kunt verplaatsen, omdat branch niets anders is dan een verwijzing naar een commit.
Antwoord 3, autoriteit 9%
Deze methode is handig:
git checkout -B <new_branch> <start point>
Waar:
<new_branch>
is je nieuwe branch (bijv.my_branch
)<start point>
is je startbranch (master
in jouw geval)-B
maakt een nieuwe branch aan vanaf<start point>
, als deze al bestaat, reset deze dan naar (het zal niet mislukken als-b
als de vertakking al bestaat)- soms kan
-m
handig zijn om te specificeren bij het wisselen van branches, dit zal een driewegsamenvoeging uitvoeren tussen de huidige branch, je werkboominhoud (handig voor scripting).
Zie: man git-checkout
voor meer details.