Ein Kollege hat einen lokalen Zweig ('branchA') vom Master erstellt, etwas gearbeitet, ihn geschoben, in den Master eingearbeitet, etwas mehr Arbeit gemacht und ihn erneut gedrückt. Gleichzeitig haben andere Kollegen an anderen Zweigen gearbeitet und sie zu einem Master zusammengeführt.
Jetzt muss ich branchA ziehen, um es zu überprüfen. Also habe ich ein git pull
und git checkout -b branchA origin/branchA
gemacht, was in Ordnung ist. Aber alle Befehle (git diff / log / show) zeigen Commits über alle Zweige im Repo.
Wie kann ich ein diff aller commits anzeigen, die für branchA mit der Version des Masters erstellt wurden, aus dem es erstellt wurde?
Wie kann ich git diff
branchA gegen den aktuellen HEAD des Masters setzen, sondern nur Dateien anzeigen, die innerhalb von branchA geändert wurden?
Für Ihre zweite Frage gilt, wie Sie die Unterschiede zwischen branchA
und der aktuellen Version Ihrer lokalen Version von master
finden. Sie möchten die 'Doppelpunkt'-Syntax mit git log
verwenden, um alle Commits in branchA
zu sehen, die nicht in master
sind. Um zu sagen:
Für die git log
man-Seite:
Wenn Sie Commits in master
oder branchA
sehen möchten, aber nicht in beiden, können Sie die 'triple-dot'-Syntax verwenden:
Schließlich können Sie mit git diff
genau die gleiche Syntax verwenden, nämlich git diff master..branchA
bzw. git diff master...branchA
.
Wenn Sie branchA
ausgecheckt haben, müssen Sie es nicht einmal als <until>
angeben. Git übernimmt HEAD
, wenn es nicht spezifiziert ist, also sind diese beiden Befehlssätze äquivalent:
und
%Vor%git diff master..brnachA
: vergleicht alle modifizierten Dateien zwischen HEAD von Master und branchA. git diff master...brnachA
: vergleicht branchA mit der Version des Masters, aus dem es erstellt wurde. FYI: git diff
generiert die Ausgabe in der Befehlszeile. Wenn Sie die Ausgabe in einigen visuellen Tools sehen möchten, verwenden Sie git difftool
.
Sie können auch alle git diff
Argumente und Optionen an git difftool
übergeben.
Git-Commits enthalten keine Informationen darüber, "auf welchem Zweig" sie ausgeführt wurden. Sie geben dir nur einen Punkt in dem Baum, von dem du zurückgehen kannst. Sobald eine Zusammenführung erfolgt, haben Sie keine Möglichkeit, aus einem Zusammenführungs-Commit zu entscheiden, welcher Elternteil von der Niederlassung kam, von der Sie angefangen haben. Dies wird in einigen Details hier diskutiert.
Das ist mein Verständnis. Ich würde gerne korrigiert werden, wenn ich falsch liege.
git log HEAD..branch, wenn Sie in der Master-Zweig sind.
Sehen Sie hier für weitere Einzelheiten: Wie kommt man hin? die Änderungen an einem Zweig in git
Tags und Links git