2016-10-25 6 views
1

Ich bin auf Zweig A und Zweig B ist davor. Ich möchte die Änderungen in B von A sehen, aber wenn ich rufe git diff B zeigt es seine Ergänzungen als Löschungen und umgekehrt, und wenn ich B 's Änderungen in die Arbeitskopie von A setzen möchte (wünschenswert, wenn ich einen Test habe Abzweigung Zweig), versucht git diff B > Bfile zu laufen, dann git apply Bfile wirft nur eine Reihe von Fehlern.Seltsames git diff Verhalten

Wenn ich stattdessen git diff A..B (ich bin bereits auf A) eingeben, zeigt es die richtigen Änderungen.

Warum zeigt der erste Befehl die Änderungen als Löschungen an, wenn sie hinzugefügt werden? Es scheint redundant und kontraintuitiv zu sein, den Zweig, in dem ich bereits bin, zu tippen, wenn ich nur die genauen Änderungen mit einem anderen Zweig haben möchte.

Antwort

0

(Beachten Sie, dass git diff A B mit git diff A..B ist ein Synonym für, also werde ich beide austauschbar in dieser Antwort verwenden.)

Das Verhalten, das Sie beschrieben ist, weil git diff B-git diff B HEAD äquivalent ist, welche die Änderungen vonBzeigt zuHEAD. Ihre Problemumgehung, git diff A..B ist gültig (wie wäre git diff HEAD..B). Um die Anforderung zu überspringen die A Niederlassung angeben, (oder HEAD) tun:

git diff ..B 

Dies wird Git sagen in HEAD auf der linken Seite, anstatt zu füllen, so dass es zu git diff HEAD..B gleichwertig ist.

+1

Sie können HEAD auch als '@' abkürzen, z. B. 'git diff @ B'. Und Sie können '-R' verwenden, um die Richtung eines Diffs umzukehren, so dass Sie dies als' git diff-R B' schreiben können. (Ich schreibe einfach HEAD, es ist nicht so schwer zu tippen und es scheint am klarsten :-)) – torek