Hoe consolideer ik lokale commits in één bestand per bestand voor een duwtje?

Gebruik nu een beetje git, maar alleen de basisfuncties.

Om over te schakelen naar Textmate en de coole lokale geschiedenisfunctie te behouden die Eclipse had, deed ik dit . Dat werkt geweldig.

Maar nu werk ik aan een team met een privé github-repository. Ik wil het team niet vervuilen met mijn volledige lokale geschiedenis van nutteloze commits.

Ik weet dat er een aantal tools zijn om mijn commits te bewerken, maar:

git rebase -i

     

Je vroeg me om opnieuw te rebasen zonder me te vertellen welke branche je wilt   rebase tegen,

     

SNIP

Welke tak? :)

Dus ik vraag me af of je tips hebt om dit allemaal te regelen. Ik zou graag alle commits voor één bestand willen combineren in één commit max. En bewerk het bericht zodat het iets nuttigs zegt.

Bedankt!

1
Misschien ontkoppelen git commit van uw Textmate opslaan en vastleggen wanneer u maar wilt?
toegevoegd de auteur Shahbaz, de bron
In werkelijkheid is een commit per elke save echt geen goed idee. Men zou tien keer per minuut kunnen besparen, wat veel incomplete nutteloze en misleidende commits creëert.
toegevoegd de auteur Shahbaz, de bron
@joedevon, ik weet niet hoe je code codeert, maar per abuis een bestand verwijderen waar je aan werkt is zeer onwaarschijnlijk. Ik ben niet tegen het plegen van vaak, maar ik adviseer ten minste te committen als de code compileerbaar is of als je iets hebt gerepareerd of als er een nieuwe functie is geschreven (zelfs als deze niet is getest). Weet je, iets zinvols om door te werken, in plaats van code die in het midden een lijn heeft. Ik pleeg persoonlijk tussen de 1 tot 5 ~ 6 keer per dag en heb nooit een probleem gehad.
toegevoegd de auteur Shahbaz, de bron
Ik geef de voorkeur aan veel onvolledige en nutteloze/misleidende commits in mijn persoonlijke repository dan alles verliezen als ik per ongeluk een bestand overschrijf. Maar mijn doel is om die commits niet op te leggen aan het hele team :)
toegevoegd de auteur joedevon, de bron
Ik hoopte dat er een oplossing zou zijn, maar misschien ook niet. Jammer, ik heb een hoop projecten waar dit prima in is geslaagd, maar misschien moet ik het opslaan losmaken. Of tenminste niet standaard.
toegevoegd de auteur joedevon, de bron
@Shahbaz Het was slechts een voorbeeld. Dit is de enige functie waar ik echt van hou in Eclipse. Je gebruikt het niet vaak, maar wanneer je het nodig hebt, is het van onschatbare waarde. Om nog maar te zwijgen, als ik geen team ben, heb ik geen externe repository, dus dit was een goede hack. Ik zal het waarschijnlijk wel verwijderen vanwege git push.
toegevoegd de auteur joedevon, de bron
Een commit per save is waarschijnlijk niet ideaal en zal leiden tot veel van de volgende rebase -i om commits te squashen en te splitsen. Het is echter nog steeds veel beter dan het andere uiterste: zeer zelden vastleggen en eindigen met een dozijn verschillende veranderingen die in één commit zijn samengevat.
toegevoegd de auteur Cascabel, de bron

1 antwoord

git rebase -i

verwacht dat je vertelt aan welk bereik van commits je moet werken. Het meest voorkomende gebruik is

git rebase -i HEAD~4

waarmee je de laatste 4 commits in de huidige uitgecheckte branch kunt "bewerken".

Ik weet niet zeker waarom je dit "per bestand" zou willen doen. Ook zal 'rebase -i' je hoofdpijn bezorgen als je daar fuseert. Van wat ik kan afleiden, kunt u dit doen:

Stel de huidige commit in aan het begin van uw wijzigingen, maar houd de werkdirectory zoals deze is.

git reset --mixed HEAD~10

Dit zou u terugbrengen naar waar u bent begonnen als u 10 commits had voor uw wijzigingen. "gemengd" zorgt ervoor dat u geen van die wijzigingen uitvoert en dat de index schoon is.

Wijzig vervolgens de wijzigingen in elk afzonderlijk bestand:

git add path/to/one/of/the/files/file.txt
git commit -m "added feature X to file.txt"

herhaal voor de rest van de bestanden. Inspecteer onderweg met git status .

Wanneer u pusht, moet u wellicht de optie -f (--force) toevoegen als u al een aantal van deze commits hebt gepusht. Als anderen van die commits werkten, laat hen dan weten dat je dit hebt gedaan. Ze zullen hun wijzigingen moeten rebasen.

5
toegevoegd
Spelen met je suggestie deed ik: "$ git rebase -i HEAD ~ 4 fatal: had een enkele correctie nodig ongeldig upstream HEAD ~ 4" >> Ik weet niet zeker waarom je dit "per bestand" zou willen doen. << Niet noodzakelijk per bestand, maar ik wil gewoon de nutteloze commits kwijtraken. @Jefromi, Right! Geadviseerde bestanden absoluut niet willen bewerken! Ik hoop dat er een manier is om een ​​goede workflow te krijgen.
toegevoegd de auteur joedevon, de bron
Bedankt @ Jefromi. Inderdaad, ik zat in een testdirectory, daarom is het mislukt. Postscriptum Ik heb andere vragen en sommige documentatie gelezen voordat ik het hier vroeg, maar het is een beetje overweldigend (en ik moet vandaag pushen). Ik wou gewoon wat meer algemene richting. Zal def. lees meer van de documenten.
toegevoegd de auteur joedevon, de bron
+1, met een paar opmerkingen: - mixed is de standaardinstelling voor git reset , en als je al een aantal van deze commits hebt gepusht, dan zou je waarschijnlijk niet moeten proberen bewerk ze. Het klinkt alsof jij en anderen misschien niet de meest ervaren zijn met Git, en een force-update is een geweldige manier om mensen te verwarren. (Also FYI Adam: stackoverflow.com/faq#signatures )
toegevoegd de auteur Cascabel, de bron
@joedevon: HEAD ~ 4 zou alleen ongeldig moeten zijn als er minder dan vier commits in jouw repository zijn. Kijk eens naar je geschiedenis, zorg dat alles goed gaat en plaats in het slechtste geval een SHA1 in de plaats. Zodra je die knik hebt opgelost, kun je ook zoeken naar andere vragen over interactieve rebase (of alleen maar het lezen van documentatie), omdat het een vrij krachtig hulpmiddel is en het geven van een volledige beschrijving buiten de reikwijdte van deze vraag/antwoord valt.
toegevoegd de auteur Cascabel, de bron