Wie wechselt und speichert man ohne Commit in Git?

Lesezeit: 3 Minuten

Ich arbeite an einem Zweig und muss plötzlich zu einem anderen Zweig wechseln, um einen dringenden Fehler zu beheben. Das Problem ist, dass die Änderungen, die ich am aktuellen Zweig mache, immer noch ein Durcheinander sind, und ich möchte das nicht festschreiben und eine schäbige Festschreibungsnachricht hinterlassen.

Gibt es eine Möglichkeit, die aktuellen Änderungen ohne Commit zu speichern?

  • verstaue es

    – Litelite

    27. Juli 2017 um 13:29 Uhr

  • Beantwortet das deine Frage? Checken Sie einen anderen Branch aus, wenn im aktuellen Branch nicht festgeschriebene Änderungen vorhanden sind

    – Hritik

    3. Juli 2021 um 18:58 Uhr

Ja, Sie können Stash verwenden.

git stash

Es speichert alle nicht festgeschriebenen Daten in einem speziellen Bereich, in dem Sie sie später wieder abrufen können

git stash apply

Sie können sehen, was sich im Stash befindet

git stash list

Stash funktioniert offensichtlich. Ich möchte nur vorschlagen, dass es aus den folgenden Gründen auch eine praktikable, wenn nicht sogar bessere Option ist, einfach das zu tun, was Sie haben:

  1. Stash wird getrennt vom aktuellen Zweig, dem Index und dem Arbeitsbereich aufbewahrt und ist weniger sichtbar. Wenn Sie nicht das andere Problem beheben und ganz schnell zurückwechseln, ist es tatsächlich einfacher, nach einer Weile mit dem Zustand des Stashs durcheinander zu kommen.
  2. Das Festschreiben Ihrer Änderungen in Ihrer Umgebung wirkt sich nicht auf irgendetwas oder irgendjemanden aus, solange Sie das Festschreiben nicht vorantreiben. Sie können Ihre Commits später jederzeit neu organisieren, wenn Sie mit der Funktion fertig sind. Im Vergleich zu Stash ist ein Commit auf dem Feature-Zweig, wo er hingehört, später einfacher zu verwalten.

  • Sie können Ihre einrichten git log Befehl, um auch Verstecke anzuzeigen. Für mich werden sie auf ähnliche Weise wie Commits angezeigt (als Knoten im Diagramm und mit einem Ancestor-Commit als übergeordnetem Element). Was Ihren zweiten Punkt betrifft, das hängt von Ihrem Arbeitsablauf ab, einige Leute ziehen es vor, immer nur kleine Commits mit sehr aussagekräftigen Nachrichten zu begehen, andere (wie ich) ziehen es vor, so zu arbeiten, wie wir es für am effizientesten halten, und quetschen die Commits zu “Fälschungen”. ” die Geschichte, um sie für andere leicht verdaulich zu machen. Für Leute, die der ersten Methode folgen, kann es leicht sein, einen unordentlichen Commit zu machen, den sie dann vergessen werden.

    – Instantepiphanie

    27. Juli 2017 um 15:20 Uhr

  • … Was Stash vermeiden hilft. Ich denke, dass verschiedene Leute verschiedene Funktionen von Git verwenden, und es ist großartig, dass es viele Workflows unterstützt.

    – Instantepiphanie

    27. Juli 2017 um 15:21 Uhr

  • @instantepiphany kein Argument da. Es kommt wirklich auf den persönlichen Stil und die Umstände an.

    – jingx

    27. Juli 2017 um 18:17 Uhr

  • Ich bin auch kein Fan von git stash. Ich bevorzuge es, “weniger offizielle” Git-Commits mit einem “Mid-Edit Save”-Commit zu speichern, wie folgt: gist.githubusercontent.com/johnnyutahh/…

    – Johnny Utahh

    17. April um 23:07 Uhr

Benutzer-Avatar
tnrich

Dies ist eine nette kleine Bash-Funktion, die ich eingerichtet habe, inspiriert von der Antwort von @jingx:

gcl() { 
    echo "### Adding any wip files";
    git add .; 
    echo "### Committing files with a temporary commit";
    git commit --no-verify -am 'local commit - work in progress';
    echo "### Checking out branch";
    git checkout "$1";
    x="$(git log -1 --pretty=%B)"
    if [ "$x" = "local commit - work in progress" ]; then
        echo "### Undoing last commit";
        git reset --soft HEAD^
    else 
        echo "### Not undoing last commit"
    fi
    echo "gcl complete"
}

Fügen Sie es Ihrer .bashrc- oder .profile-Datei hinzu und verwenden Sie es dann gcl my-branch um Branches zu wechseln und Ihre Arbeit als lokales Commit zu speichern und gleichzeitig Ihre lokalen Commits bei Änderung zu entpacken.

Sagen Sie zum Beispiel, Sie sind online branch1 und nicht festgeschriebene Änderungen haben. Mach einfach ein

gcl urgent-fix

tun, was Sie tun müssen, und dann zurückspringen

gcl branch1

Ihre nicht festgeschriebenen Änderungen sind so vorhanden, wie Sie sie hinterlassen haben.

Obwohl ein Commit stattfindet, wird er nicht remote gepusht und kann daher ohne Konsequenzen lokal rückgängig gemacht werden.

  • Wow! Vielen Dank. Dies ist perfekt!

    – tgrün

    1. August 2018 um 19:13 Uhr

  • gcl steht für Git Checkout save Local

    – tnrich

    1. August 2018 um 19:15 Uhr

1054330cookie-checkWie wechselt und speichert man ohne Commit in Git?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy