Ich bin unerfahren mit Git, aber ich versuche mein Bestes, um mich daran zu gewöhnen, und bis jetzt benutze ich es nur für Projekte, an denen ich alleine arbeite.
Wenn ich programmiere, gibt es natürlich einen Top-Down-Ansatz (da ich die Zukunft nicht kenne) und es gibt ein wiederkehrendes Thema:
Ich mache etwas Arbeit.
Ich finde heraus, dass ich, um meine Arbeit in etwas "Verbindliches" zu verwandeln, andere Arbeiten machen muss.
Die andere Arbeit verdient ihren eigenen Einsatz.
Mit etwas Verbindlichem meine ich etwas, das kompiliert oder etwas, das kein totales Chaos ist.
Und von etwas, das sein eigenes Commit verdient, verweise ich darauf, dass ich gelernt habe, dass Commits nur eine Sache tun sollten.
Die Art und Weise, wie ich es auflöse, ist umständlich. Wenn sich die andere Arbeit in einer anderen Datei befindet, erstelle ich eine neue Verzweigung, gebe sie dort ein und füge sie zusammen. Befindet sich die Arbeit in derselben Datei? Ugh? Ich erstelle eine lokale Kopie und versetze die Datei in den HEAD-Status. Führen Sie das erforderliche Commit durch und beginnen Sie dann, meine Arbeit von der Kopie wiederherzustellen. Wie soll ich damit eigentlich umgehen? Ich kann mir nicht vorstellen, dass das so ist, oder? Das nehme ich nicht an, weil es für alle (die zumindest die Zukunft nicht kennen) etwas öfter auftauchen muss. Oder scheint mein Workflow fehlerhaft zu sein?
git status
, um alle geänderten Dateien zu sehen und zwei oder mehr Festschreibungen zu machen, indem ichgit add
mit bestimmten Dateien (anstelle vongit add --all
) arbeite und Stück für Stück festschreibe.git add -p
und dann nur diese Teile festschreiben. Es ist eine sehr mächtige Technik und ich benutze sie fast die ganze Zeit.Antworten:
Es gibt mehrere Möglichkeiten, dies zu lösen.
Wenn Sie die Änderungen für das erste Commit vornehmen möchten, ohne Ihre aktuellen Änderungen zu beeinträchtigen, können Sie sie verwenden
git stash
. Dadurch werden alle offenen Änderungen entfernt, sodass Sie sie später wiederherstellen können. Verwenden Sie, umgit status
zu sehen, dass sie nicht mehr vorhanden sind. Erstellen Sie nun das erste Commit, wie Sie es gewohnt sind. Als Nächstes können Siegit stash pop
Ihre ursprünglichen Änderungen wiederherstellen und das zweite Commit erstellen, das Ihre primäre Arbeit erledigt.Eine andere Möglichkeit wäre, alle erforderlichen Änderungen vorzunehmen und dann zwei Festschreibungen zu erstellen, die beide einen Teil Ihrer Arbeit enthalten. Verwenden Sie dazu den von git bereitgestellten Index (auch als Staging-Bereich bezeichnet). Dies ist ein spezieller Bereich, in dem Sie Commits vorbereiten können. Angenommen, Sie haben mehrere Dateien geändert, können Sie jede mit dem Index hinzufügen
git add
. Dabei werdengit commit
nur die zum Index hinzugefügten Dateien festgeschrieben.git status
zeigt Ihnen, welche Teile Ihrer Änderungen übernommen werden und welche nicht. Zum Beispiel sieht es so aus, nachdem die Dateien a.txt, b.txt und c.txt geändert wurden und danachgit add a.txt
:Wenn Sie tun ,
git commit
in diesem Zustand nur die Änderungen an a.txt werden hinzugefügt werden , um Ihr zu begehen.Zusätzlich können Sie die genauen Änderungen, die festgeschrieben werden sollen, mit überprüfen.
git diff --cached
Dies zeigt Ihnen eine Übersicht aller Änderungen, die festgeschrieben werden sollen.Wenn eine Datei Änderungen für beide Commits enthält, können Sie dem Index auch nur Teile davon hinzufügen, indem Sie "git add --patch b.txt" verwenden. git bietet Ihnen einen interaktiven Modus, in dem Sie bei jeder Änderung an der angegebenen Datei gefragt werden, ob sie dem Index hinzugefügt werden soll. Dies kann schwieriger werden, wenn Sie Änderungen in den Zeilen nebeneinander haben, die in die beiden Festschreibungen aufgeteilt werden müssen. Es gibt jedoch auch Möglichkeiten, dies zu lösen.
Wenn Sie mehr über den Staging-Bereich erfahren möchten, lesen Sie dies unter http://gitready.com/beginner/2009/01/18/the-staging-area.html
Weitere Informationen zum interaktiven Hinzufügen finden Sie hier: http://nuclearsquid.com/writings/git-add/
quelle
Wenn Sie eine GUI für Git wie SourceTree von Atlassian oder verwenden
git gui
, können Sie Teile von Dateien festschreiben und andere Teile nicht festschreiben. Tatsächlich können Sie einzelne Codezeilen festschreiben.Ich mache das oft, wenn ich in Kaninchenlöcher falle, wie du es beschreibst. Dies ist eine großartige Möglichkeit, dieses sinnvolle Commit oder Commit als Vorläufer des Haupt-Commits zu verwenden.
Sie können dies über die Befehlszeile tun, aber es ist etwas umständlich.
Wenn Sie auf Git-Patch-Ebene und in einzelnen Zeilen ein Commit durchführen können, müssen Sie keine neuen Zweige erstellen, stapeln, festschreiben, stapeln und zusammenführen. Arbeiten Sie einfach weiter und unterbrechen Sie nicht den Fluss. Du hast eine gute Sache am Laufen.
quelle