Nun ja und nein ...
Ich verstehe, dass Sie möchten, dass Ihre lokalen Kopien die Inhalte der Fernbedienung "überschreiben", aber oh Mann, wenn jemand die Dateien im Remote-Repo auf andere Weise geändert hat und Sie ihre Änderungen einfach ignorieren und versuchen, "zu erzwingen". Ihre eigenen Änderungen ohne selbst suchen auf mögliche Konflikte, die ich für Sie (und Ihre Mitarbeiter) gut, weinen ;-)
Das heißt, es ist wirklich einfach, das "Richtige ..." zu tun.
Schritt 1:
git stash
in Ihrem lokalen Repo. Dadurch werden Ihre lokalen Updates im Stash gespeichert und Ihre geänderten Dateien wieder in den Vorbearbeitungsstatus zurückgesetzt.
Schritt 2:
git pull
um modifizierte Versionen zu erhalten. Hoffentlich werden dadurch keine neuen Versionen der Dateien angezeigt, über die Sie sich Sorgen machen. Wenn dies nicht der Fall ist, funktioniert der nächste Schritt reibungslos. Wenn es tut , dann haben Sie einige Arbeit zu erledigen, und Sie werden es nicht bereuen.
Schritt 3:
git stash pop
Dadurch werden Ihre modifizierten Versionen, die Sie in Schritt 1 versteckt haben, mit den Versionen zusammengeführt, die Sie gerade in Schritt 2 gezogen haben. Wenn alles reibungslos verläuft, sind Sie fertig!
Wenn andererseits echte Konflikte zwischen dem, was Sie in Schritt 2 vorgenommen haben, und Ihren Änderungen aufgetreten sind (aufgrund einer anderen Bearbeitung in der Zwischenzeit), werden Sie es herausfinden und aufgefordert, diese zu lösen. Tu es.
Auf diese Weise werden die Dinge viel besser laufen - es wird wahrscheinlich Ihre Änderungen beibehalten, ohne dass Sie wirklich daran arbeiten müssen, und Sie auf schwerwiegende Probleme aufmerksam machen.
git commit
lokale Änderungen vorgit pull
?Sie können Ihre lokalen Änderungen zuerst verstauen, dann ziehen und dann den Versteck öffnen.
Alles, was Änderungen von Remote aus überschreibt, hat Konflikte, die Sie manuell lösen müssen.
quelle
Sie haben also Ihre lokalen Änderungen in Ihr lokales Repository übernommen. Um Remote-Änderungen an Ihrem lokalen Repository zu erhalten, ohne Änderungen an Ihren lokalen Dateien vorzunehmen, können Sie diese verwenden
git fetch
. Eigentlichgit pull
ist eine zweistufige Operation: eine zerstörungsfreie,git fetch
gefolgt von agit merge
. Siehe Was ist der Unterschied zwischen "Git Pull" und "Git Fetch"? für mehr Diskussion.Detailliertes Beispiel:
Angenommen, Ihr Repository sieht folgendermaßen aus (Sie haben Änderungen vorgenommen
test2
:Und das
origin
Repository ist wie folgt (jemand anderes hat sich verpflichtettest1
):Zu diesem Zeitpunkt wird sich git beschweren und Sie bitten, zuerst zu ziehen, wenn Sie versuchen, Ihr
test2
zu Remote-Repository zu pushen . Wenn Sie sehen möchten, was test1 ist, ohne Ihr lokales Repository zu ändern, führen Sie Folgendes aus:Ihr lokales Ergebnis-Repository würde folgendermaßen aussehen:
Jetzt haben Sie die Remote-Änderungen in einem anderen Zweig und behalten Ihre lokalen Dateien bei.
Was kommt dann als nächstes? Sie können a ausführen
git merge
, was den gleichen Effekt wiegit pull
(in Kombination mit dem vorherigengit fetch
) hat, oder, wie ich es vorziehen würde, a ausführen,git rebase origin/master
um Ihre Änderung zusätzlich anzuwendenorigin/master
, wodurch Sie eine sauberere Historie erhalten.quelle