2016-08-08 11 views
1

Ich experimentiere gerade mit Git und habe folgendes Problem festgestellt. Ich habe eine Python-Datei mit einer Funktion namens f1 erstellt und sie unter main.py gespeichert und an den Master-Zweig übergeben. Ich habe dann einen Zweig mit dem Namen b1 erstellt, bin zurück zum Master gegangen und habe den Namen dieser Funktion in f2 geändert (keine weiteren Änderungen). Zurück im Zweig b1 habe ich eine zweite Funktion namens new_function hinzugefügt. Danach habe ich versucht, b1 auf Master zu rebasen.Wie schlau ist Git in Python Rebasing?

Ich war überrascht zu sehen, dass es einen Konflikt gab. Warum sehe ich nicht, dass ich einfach den Namen von f1 in f2 im Master geändert habe?

Mache ich etwas falsch? Irgendwelche Vorschläge werden geschätzt.

Antwort

2

Sie machen nichts falsch. Git verhindert einfach einen möglichen Verlust Ihrer Arbeit. Da zu diesem Zeitpunkt die Funktion f1 zu f2 in Ihrem Zweig master geändert wurde - Ihr Zweig b2 bezieht sich immer noch darauf als f1. Also, wenn Sie das tun git rebase, git einfach fragen Sie „so was Namen wollen Sie es sonst f1, f2 oder etwas sein

+0

Aber in diesem Fall gibt es keinen Konflikt. Es gab Änderungen im Master Das stellt mich nicht in Konflikt mit meinem Zweig. Warum fragt er mich dann nicht? Es sollte sehen können dass ich nur an der neuen Fiktion gearbeitet habe. Es würde das tun, wenn ich es in einer neuen Datei erstellt hätte. – Nickpick

+0

Wenn Sie Ihre 'Feature'-Verzweigung' rebase', was'rebase' tut, werden alle Commits, die Sie in Ihrer 'Feature'-Verzweigung haben, auf Ihren Master oder den Zweig, den Sie in 'git angegeben haben, wiedergegeben Rebase '. Wenn Ihr Zweig keine Änderungen an irgendwelchen Informationen enthält, die auf dem Index erhalten werden, von dem er stammt, haben Sie keinen Konflikt. –

+0

"auf Index es entstand aus" - ist das auf einer Dateibasis? – Nickpick

2

Git -. Wie fast jede andere VCS - nicht weiß, symanitcs des verfolgten Inhalte, Es kann also nicht erraten, was widersprüchlich ist und was nicht. Wenn Sie zwei Historien zusammenführen oder neu erstellen, die beide die gleiche Datei geändert haben, handelt es sich um einen Konflikt, den Sie beheben müssen. Verwenden Sie hierfür ein Propertool (wie P4Merge, das beste freie Diff.)/merge tool Ich weiß, und es ist einfach, den Konflikt zu lösen oder in Ihrem Fall sehen, dass es nicht einmal einen echten Konflikt gibt.

+0

In diesem Fall würden Sie zustimmen, dass es unbedingt erforderlich ist, den Code in so viele verschiedene Dateien wie möglich aufzuteilen, anstatt nur in einer Datei zu funktionieren? – Nickpick

+0

Nein, das ist Unsinn. Sie lassen das VCS nicht diktieren, wie Sie Ihren Code strukturieren. Sie strukturieren den Code so, wie er für Ihr Projekt/Ihre Sprache geeignet ist. Und wenn Konflikte bei der Zusammenführung auftreten, lösen Sie sie mit einem geeigneten Werkzeug auf. In Ihrem Fall ist dies so einfach wie das Drücken von Speichern in P4Merge, nachdem Sie überprüft haben, dass es wirklich keinen echten Konflikt gibt. – Vampire

+0

Ich benutze derzeit pycharm und es gibt ein Werkzeug für die Handhabung der Diffs. Aber es scheint nicht in der Lage zu sein, zu sehen, dass eine Funktion den Namen änderte, während ich einen anderen hinzufügte, so dass ich nur die Serverversion oder meine Version der Datei als Ganzes akzeptieren kann. Dies scheint nicht zufriedenstellend zu sein. – Nickpick