64 Stimmen

Geänderte Dateien in einem Git-Zweig fließen in einen anderen Zweig über

Ich arbeite an einem Git-Repository mit einem Master-Zweig und einem anderen, dem Themenzweig. Ich habe zum Themenzweig gewechselt und eine Datei geändert. Wenn ich nun zum Master-Zweig wechsle, wird dieselbe Datei als geändert angezeigt.

Zum Beispiel:

git-Status im git-build-Zweig:

# On branch git-build
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   cvsup_current
#

Zum Master-Zweig wechseln

[root@redbull builder_scripts (git-build)]# git co master
M       builder_scripts/cvsup_current
Switched to branch "master"

Git-Status im Master-Zweig

[root@redbull builder_scripts (master)]# git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   cvsup_current
#

Warum wird die Datei im Master-Zweig als geändert angezeigt, obwohl sie im Git-Build-Zweig geändert wurde?

Meines Erachtens sind die Zweige unabhängig voneinander, und wenn ich von einem Zweig in einen anderen wechsle, werden die Änderungen nicht von einem Zweig in einen anderen "verschoben". Ich übersehe hier also offensichtlich etwas.

Hat jemand einen Anhaltspunkt?

71voto

Gareth Punkte 123487

Warum wird die Datei im Master-Zweig als geändert angezeigt, obwohl sie im Git-Build-Zweig geändert wurde?

Wichtig ist, dass die Datei pas im git-build-Zweig geändert. Sie wurde nur in Ihrer Arbeitskopie geändert.

Erst wenn Sie eine Übergabe durchführen, werden die Änderungen in den Zweig zurückgestellt, den Sie ausgecheckt haben.

0 Stimmen

Danke, die gemeinsamen Antworten haben mir viel Klarheit verschafft!

0 Stimmen

Ich habe gerade festgestellt, aus einer SVN-Mentalität kommend, in einem Zweig committing ist nicht wirklich committing es zu Ihrem "SVN"-Server, es ist mehr ein "speichern Sie meine Änderungen an diesem Zweig". Ich bin immer noch versuchen, anzupassen.

4 Stimmen

"Sie wurde nur in Ihrer Arbeitskopie geändert" <-- nein, sie wurde auch im Index geändert, d.h. die Änderung wurde in einem Schritt durchgeführt

44voto

Peter Burns Punkte 43323

Wenn Sie Ihre Änderungen an einem Zweig vorübergehend speichern wollen, während Sie an einem anderen arbeiten, können Sie die git stash Befehl. Das ist einer der erstaunlichen kleinen, unbesungenen Vorteile von Git. Beispiel-Workflow:

git stash #work saved
git checkout master
#edit files
git commit
git checkout git-build
git stash apply #restore earlier work

git stash speichert einen Stapel von Änderungen, so dass Sie mehrere Checkpoints sicher speichern können. Sie können ihnen auch Namen/Beschreibungen geben. Vollständige Informationen zur Verwendung aquí .

1 Stimmen

Dies beantwortet zwar nicht direkt die Frage nach dem Warum, aber diese Antwort entspricht am ehesten dem, was der Auftraggeber beabsichtigt hat. Das ist genau das, wonach ich gesucht habe

1 Stimmen

Git stash wird die neuen Dateien nicht sichern. Es speichert nur die bereits verfolgten Dateien. Wenn man also neue Dateien erstellt hat, sind diese auch nach dem Stash noch in anderen Ordnern verfügbar.

15voto

Marko Punkte 29192

Dies ist das Standardverhalten von Git.

Sie können verwenden -f Flagge an der Kasse, um "saubere Kasse" zu machen, wenn Sie möchten.

16 Stimmen

Seien Sie sich bewusst, dass dadurch die Änderungen auf dem Zweig, den Sie verlassen, nicht erhalten bleiben. Die nicht übertragenen Änderungen werden weggeworfen (es sei denn, die Datei ist untracked).

12 Stimmen

Es ist der sehr seltene Fall, dass Sie die git checkout -f da es sofort, unwiderruflich und ohne Aufforderung alle nicht übertragenen Änderungen wegwirft. Es gibt einen Grund, warum Git Checkout so funktioniert, wie es funktioniert. Ich empfehle, Gareths Kommentar unten zu lesen.

10voto

Greg Hewgill Punkte 882617

Die geänderten Dateien werden nicht in das Projektarchiv aufgenommen, bis Sie die et sie begehen. Wenn Sie zurück zu Ihrem Themenzweig wechseln und die Datei committen, wird sie nicht im Masterzweig erscheinen.

3voto

Raviteja Punkte 1602
  • Es ist nicht so, dass Git-Zweige voneinander abhängig sind, aber auch sie haben auch nicht für jeden Zweig eine eigene vollständige Codebasis.
  • Für jede Übertragung speichert Git ein Objekt, das einen Zeiger auf die Änderungen enthält. Jeder Zweig verweist also auf seinen eigenen letzten Commit und HEAD verweist auf den Zweig, in dem Sie sich gerade befinden.
  • Wenn Sie die Verzweigung wechseln, zeigt der HEAD-Zeiger auf diese bestimmte Übergabe des Zweigs. Wenn es also geänderte Dateien gibt, wird der Standardverhalten ist es, diese zu kopieren.

Sie können die folgenden Dinge tun, um dieses Problem zu lösen.

  1. Utilisez -f Option, um die Änderungen zu ignorieren.

Wenn Sie die Änderungen speichern möchten:

  1. Übertragen Sie die Änderungen lokal in denselben Zweig und wechseln Sie dann die Zweig.
  2. Utilisez git stash , wechseln Sie den Zweig, erledigen Sie Ihre Arbeit, wechseln Sie zurück zum ursprünglichen Zweig und erledigen git stash apply .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X