2016-06-30 29 views
0

Versuchen, Git-Verhalten zu verstehen.Warum kann git pull lokale Änderungen nicht zusammenführen?

Wenn ich git pull ausführen ich erhalte eine Warnung

error: Your local changes to the following files would be overwritten 
by merge: 
     foo/bar 
Please, commit your changes or stash them before you can merge. Aborting 

Aber wenn ich git stash save, git stash pull und dann git stash pop, die Änderungen ohne Probleme angewendet werden.

Auto-merging foo/bar 
... 

Warum kann nicht/nicht git pull das gleiche tun?

+1

'git pull' =' git fetch' + 'git merge' ... Ziehen führt zu einer Zusammenführung, daher die Fehlermeldung. –

+0

Wenn du einen smarter 'git pull' willst, der das stash/pull/pop für dich macht, dann beachte [git-smart] (https://github.com/geelen/git-smart) und es ist' git smart- Pull'-Befehl. – meagar

+0

Der Speichern/Speichern-Workflow für Git Stash funktioniert mit nicht festgeschriebenem Code. Wie weiß git, was Sie mit Ihrem unverbindlichen Code machen wollen? Ich möchte lieber, dass du sagst, was du willst, anstatt es entweder wegzuwehen oder es automatisch wegzuspeichern. Sie müssen nicht festgeschriebenen Code manuell behandeln, bevor Sie versuchen, Ihre Sachen mit Upstream-Änderungen zu verschmelzen (Zweck der Pull ...) – g19fanatic

Antwort

2

Es kann nicht garantiert werden, dass die Zusammenführung im Allgemeinen automatisch durchgeführt werden kann. Es kann Konflikte geben, die manuell gelöst werden müssen. In diesem Fall wäre es für den Benutzer ziemlich frustrierend, wenn er die lokalen Änderungen, an denen er gerade arbeitet, vergessen hat und die Zusammenführung nur "rückgängig machen" möchte, um wieder dahin zurückzukehren, wo sie waren. Wenn Sie zuerst Commit oder Stash durchführen, können Sie die Zusammenführung abbrechen/rückgängig machen, denn wenn Sie das Commit durchgeführt haben, haben Sie immer noch das Commit und wenn das Stash-Popup nicht ohne Konflikte zusammengeführt wurde, dann wird das Stash nicht funktionieren entfernt.