Ich arbeite sehr oft an einigen Funktionen meines Projekts, die ich unterbrechen muss, bevor sie für ein Commit ausreichen. Ich benutze jedoch täglich zwei verschiedene Computer zum Codieren (meinen Laptop und meinen Forschungslabor-Desktop). ZB: Ich arbeite zu Hause an einem Feature, dann höre ich auf und gehe in mein Labor.
Ich möchte keine Cloud-Synchronisierung (z. B. Dropbox) mit GitHub-Remote-Tracking mischen.
Ich habe einfach unfertige (und unordentliche) Zustände meines Codes vorher festgeschrieben (und es gepusht), nur um das in den anderen Computer zu ziehen, um die Arbeit fortzusetzen. Ich bin mir ziemlich sicher, dass dies eine schlechte Praxis ist.
Heute bin ich allerdings git stash
nach dem Googeln ein bisschen rübergekommen. Es scheint die perfekte Lösung für das zu sein, was ich brauche.
In der Dokumentation wird jedoch nicht angegeben, ob es nach dem Pushen der Änderungen an Github geht. Außerdem möchte ich wissen, ob es einen effizienteren Weg gibt, um die von mir benötigte Mobilität zu erreichen.
Danke im Voraus!
Antworten:
Es ist in Ordnung, schmutzige, unfertige Arbeiten zu verrichten. Arbeiten Sie in einer Themenbranche. Legen Sie früh fest und legen Sie häufig fest. Lesen Sie weiter Wann soll Code festgeschrieben werden? Für einige Richtlinien, wann ein Commit durchgeführt werden soll. Speziell für Git können Sie sich einem Zweig widmen und ihn so oft verschieben, wie Sie möchten.
Wenn dieser Zweig nur für Sie bestimmt ist, schreiben Sie defekten Code fest und übertragen Sie ihn. Sie sollten es nur unterlassen , fehlerhaften Code an einen Zweig weiterzuleiten , der von anderen Personen verwendet wird. Zögern Sie nicht, Ihren eigenen Code zu knacken.
quelle
Verstecke sind für den lokalen Gebrauch gedacht, als vorübergehender Ort, um Dinge zu verstauen, während Sie mit Zweigen herumspielen.
Wenn Sie der einzige sind, der an einem Zweig arbeitet, gibt es kein Problem damit, fehlerhaften Code zu schreiben. Was ich in ähnlichen Situationen tue, ist, ein unterbrochenes Commit auszuführen und es nach dem Ziehen an der anderen Stelle wieder
git reset HEAD~1
rückgängig zu machen. Dies setzt natürlich voraus, dass Sie--force
auf Ihrempulls
undpushes
wenn Sie den Standort wechseln.Oder ich warte einfach bis zu meinem ersten Commit und mache einen
git commit --amend
. Oder ich drücke einfach alle unterbrochenen Commits aus, wenn ich den Feature-Zweig festschreibe. Oder ich mache mir einfach keine Sorgen um ein paar klar gekennzeichnete, gebrochene Commits in meiner Geschichte, weil ich dazu neige, nicht zu gehen, bis ich an einem guten Halteplatz bin. Es gibt viele Möglichkeiten.quelle
--amend
so dass es--force
für die Schübe erforderlich ist. Besser nur auf einen Wegwerfzweig festlegen.stash
ist nicht wirklich zufriedenstellend, außer das Arbeitsverzeichnis zu bereinigen, um "Ihre Filiale zu entstören"; Wenn Siestash pop
den Zustand nicht sofort wieder herstellen, wird es sehr verwirrend.Wenn tatsächlich zu speichernde Arbeit vorhanden ist, sollte es sich dennoch um ein Commit handeln, auch wenn dies nicht für einen dauerhaften Repo-Eintrag geeignet ist. Tatsächlich lasse ich mein Arbeitsverzeichnis nie in einem Zustand, der nicht unter Versionskontrolle steht. Ich verwende einige sehr einfache Python-Skripte , um jede Änderung als temporäres Commit zu speichern. Wenn Sie das ausprobieren möchten, gehen Sie wie folgt vor:
git-tmp-commit
. Alle Änderungen werden automatisch in einen neuen, eindeutigen Zweig übernommen.ccd
Skript, das tatsächlich alles von Grund auf in einen temporären Ordner auscheckt und automatisch den neuesten Zweig auswählt. Sie können den Zweig aber auch einfach manuelltemporary-commits/original-branch/YYYY-MM-DD...
von einem vorhandenen Klon des Repos abrufen und auschecken.git-tmp-commit -r
. Auf diese Weise kehren Sie zum ursprünglichen Zweig † zurück (z. B.master
) und belassen die Änderungen des temporären Commits im Arbeitsverzeichnis. Sie können also hier fortfahren, bis es Zeit für ein ordnungsgemäßes Commit ist (oder temporär, wenn Sie es erneut verlassen müssen).† So wie das Skript jetzt geschrieben ist, funktioniert dies nur, wenn im Checkout-Repo keine Verzweigung vorhanden ist
master
. Im Zweifelsfall müssten Sie alsogit branch -d master
; das ist offensichtlich nicht wirklich ideal ...quelle