Ein paar Freunde und ich arbeiten an einem Projekt über GitHub. Wir teilen uns alle denselben Zweig, was eine gute Idee sein kann oder auch nicht.
Ich habe einen Teil des Codes bearbeitet und die Änderungen übernommen. Ich wollte Commit zu GitHub pushen (ich arbeite mit Visual Studio 2013 und dem integrierten Git-Tool), aber ich habe diesen Fehler erhalten:
“Es gibt neue Remote-Änderungen. Sie müssen sie ziehen, bevor Sie pushen können.”
Also habe ich versucht, die Remote-Änderungen zu ziehen, und ich bekomme diesen Fehler:
„Ein Fehler ist aufgetreten. Detaillierte Meldung: Ein Fehler wurde von libgit2 ausgelöst. Kategorie = 21 (MergeConflict). 9 nicht festgeschriebene Änderungen würden durch Zusammenführen überschrieben.“
Ich habe versucht, Zweige zu ändern, damit ich meine Änderungen übertragen und sie dann mit dem ersten Zweig zusammenführen kann, aber ich habe diesen Fehler erhalten:
“Wechseln zum Master nicht möglich, da nicht festgeschriebene Änderungen vorhanden sind. Bestätigen Sie Ihre Änderungen oder machen Sie sie rückgängig, bevor Sie die Zweige wechseln. Einzelheiten finden Sie im Ausgabefenster.”
Ich habe keine Ahnung, was ich tun soll, außer vielleicht meine Änderungen per E-Mail an einen meiner Freunde zu senden und sie meine Änderungen übertragen zu lassen. Ich weiß jedoch nicht, was mit meinen lokalen Commits passieren würde.
BEARBEITEN
Das Problem ist gelöst. Nachdem ich sichergestellt hatte, dass alle Commits synchronisiert wurden, öffnete ich git bash und zog die Remote-Commits. Nach ein paar Versuchen ging ich zurück zu Visual Studio und stellte fest, dass es die Zusammenführung registriert hatte. Ich habe alle Konfliktdateien gelöst und konnte das Projekt vorantreiben.
Danke an alle, die geantwortet haben!
Sie müssen alle Ihre lokalen Änderungen festschreiben, dann ziehen und dann drücken.
– SLaks
20. Februar 2014 um 22:58 Uhr
Wenn ich versuche, zu ziehen, erhalte ich diese Fehlermeldung: Ein Fehler ist aufgetreten. Detaillierte Meldung: Von libgit2 wurde ein Fehler ausgelöst. Kategorie = Os (Fehler). „C:/Users/Walter/Source/Repos/JSDW_FTP_Project/FTPBoss/FTPBoss/bin/Debug/FTPBoss.vshost.exe“ konnte nicht zum Schreiben geöffnet werden: Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird.
– Walter Schultz
20. Februar 2014 um 23:05 Uhr
Es hört sich so an, als hättest du dich nicht wirklich verpflichtet alle Ihrer Änderungen. Mach ein git status (oder was auch immer gleichwertiges Visual Studio anbietet).
– jdigital
20. Februar 2014 um 23:07 Uhr
Ich habe alle meine Änderungen übernommen, aber ich erhalte immer noch diesen Fehler: Ein Fehler ist aufgetreten. Detaillierte Meldung: Von libgit2 wurde ein Fehler ausgelöst. Kategorie = Os (Fehler). „C:/Users/Walter/Source/Repos/JSDW_FTP_Project/FTPBoss/FTPBoss/bin/Debug/FTPBoss.vshost.exe“ konnte nicht zum Schreiben geöffnet werden: Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird.
– Walter Schultz
20. Februar 2014 um 23:44 Uhr
@WalterSchultz: Du solltest das hinzufügen bin Verzeichnis zu .gitignore, zusammen mit einer Reihe anderer Dateien. Siehe Ignorieren-Vorlage von GitHub.
– SLaks
21. Februar 2014 um 1:20 Uhr
David Voyles
So blöd es klingt, ich ging einfach zu dem Befehlszeileund es hat funktioniert.
Git-Status
Git ziehen
Git-Push
alles funktionierte gut.
Wenn ich dasselbe in Visual Studio gemacht habe, hat es nicht funktioniert. Stelle dir das vor.
Hier gilt das gleiche! Danke dafür!
– Mivaweb
7. Oktober 2016 um 8:51 Uhr
Recht. Ich habe diese Situation oft. VS weigert sich, etwas zu tun, aber über die Konsole ist das kein Problem.
– vtortola
7. Dezember 2016 um 15:02 Uhr
Gehen Sie durch die Befehlszeile wäre ein weiterer guter Ansatz, da es funktioniert.
– Alexz
9. Januar 2017 um 15:28 Uhr
dmquiggin
Bei Verwendung des Git-Providers von Visual Studio (GEGEN 2013, GEGEN 2015), kann diese Situation auch in Szenarien auftreten, in denen ein lokaler Commit hat durchgeführt, aber beim Versuch, vom Server zu ziehen und zusammenzuführen, die Fehlermeldung:
“Nicht festgeschriebene Änderungen würden beim Zusammenführen überschrieben”
wird weiterhin angezeigt und die Pull-Aktion wird abgebrochen.
Dies kann vorkommen, weil es lokal gibt Unverfolgte Dateien die nicht Teil des lokalen Commits waren, aber Teil des Remote-Pulls sind; die Zusammenführungsauflösung kann dieses Szenario nicht bewältigen.
Typisch dies tritt auf, wenn einige Dateien wie z. B. T4-Vorlagenausgaben in einem Commit auf einer Workstation enthalten sind, auf anderen jedoch nicht.
Zusätzlichdies kann vorkommen in Visual Studio 2015bei der Arbeit mit MVC6 Projekte (zum Zeitpunkt des Verfassens dieses Artikels), wenn Dateien im wwwroot-Ordner auf einer Arbeitsstation in ein Commit aufgenommen wurden, auf einer anderen jedoch nicht (eine mögliche Ursache dafür ist, dass die .gitignore-Dateien auf den Arbeitsstationen, die versuchen, mit der .gitignore-Datei zu arbeiten, unterschiedlich sind dasselbe Server-Repository).
Lösen:
a) Zeigen Sie den Dialog Team Explorer > Änderungen an.
b) Stellen Sie sicher, dass alle nicht nachverfolgten Dateien, die sich tatsächlich im Server-Zweig befinden, in Ihre Commits aufgenommen werden müssen; Klicken Sie dazu mit der rechten Maustaste und wählen Sie Hinzufügen. Wenn Sie beabsichtigen, sie zu überschreiben, können Sie alternativ Löschen auswählen. Bitte Vorsicht beachten.
c) Führen Sie ein Commit und dann ein Pull durch, und führen Sie alle erforderlichen Merge-Konfliktlösungen durch.
d) Führen Sie einen Push durch, um Ihr Remote-Repository zu aktualisieren.
Gute Antwort! Für mich lag das Problem in einer der Nuget-Paketdateien. Die lokale nicht nachverfolgte Datei wurde gelöscht und mit der aus der Pull-Anforderung aktualisiert.
– Leigh
28. September 2015 um 13:25 Uhr
Als Referenz ist meine Antwort vom 21.12.2015 noch aktuell; Ich habe dieses Verhalten mit VS 2013 und VS2015 unter Verwendung von ASP.Net MVC6 RC1 mit dem derzeit aktuellsten verfügbaren Visual Studio Git Provider überprüft.
– dmquiggin
21. Dezember 2015 um 21:07 Uhr
Ich habe die obigen Schritte ausprobiert, aber es funktioniert nicht. Ich scheine ein Fehler in der Github-Komponente in Visual Studio zu sein. Ich habe auch Git Tortoise und dadurch konnte ich meinen lokalen Zweig synchronisieren und dann pushen, nachdem die Zusammenführung zwischen Master und meinem lokalen Zweig möglich war.
– Alexz
9. Januar 2017 um 15:27 Uhr
Im Moment versuchen Sie im Wesentlichen, a zu tun git merge mit nicht festgeschriebenen Änderungen in Ihrem Zweig (Pull ist nur Abrufen + Zusammenführen). Git beschwert sich zu Recht, dass eine solche Operation die nicht festgeschriebenen Änderungen im Zweig überschreiben würde.
Um mit dem Pull-Vorgang fortzufahren, müssen Sie diese nicht festgeschriebenen Änderungen aus dem Arbeitsverzeichnis entfernen. Es gibt ein paar Möglichkeiten, dies zu tun
Übertragen Sie sie in Ihr lokales Repository
stash sie, führe den Pull-Vorgang aus und entstash sie dann auf dem Pull
commit, fetch, rebase und dann zusammenführen
Wenn Sie neu bei git sind, würde ich wahrscheinlich mit Option 1 beginnen.
Wie übertragen Sie Ihre nicht festgeschriebenen Änderungen an das lokale Repository? Woher wissen Sie überhaupt, wo diese Änderungen sind?
– Robert Harvey
5. Oktober 2015 um 17:00 Uhr
Nicht das Problem, dies trat auch bei allen lokalen Änderungen auf. Es ist ein Visual Studio-Problem.
– thewhiteambit
25. September 2017 um 16:04 Uhr
Visual Studio 2013 scheint als GIT-UI noch nicht ausgereift zu sein. Ich bin auf ein ähnliches Problem gestoßen, selbst nachdem ich alle meine Änderungen lokal übernommen hatte. Für Fehler, die durch Push & Pull in Visual Studio 2013 entstehen, würde ich empfehlen, Git Bash zu verwenden, um einen Git-Pull-Befehl auszuführen. Der Befehlszeilen-Pull-Befehl ist viel leistungsfähiger als die VS-Benutzeroberfläche und löst einige Probleme.
Als Antwort auf Walter Schultz erhalten Sie den Fehler, weil Sie anscheinend versuchen, Binär- und Assemblydateien (DLL und Exe) in der Versionskontrolle zu halten. Binärdateien können nicht bearbeitet und nicht zusammengeführt werden, daher sollten sie nicht in die Versionskontrolle aufgenommen werden.
Um diese Dateien aus dem GIT-Repository auszuschließen, können Sie eine .gitignore-Datei erstellen und folgende Elemente hinzufügen:
--- begin .gitignore file ----------------
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
# User-specific files
*.suo
*.user
*.sln.docstates
*.cache
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
x64/
build/
bld/
[Bb]in/
[Oo]bj/
Dev/
bin/
--- end gitignore file ----------------
Sobald Sie die .gitignore-Datei erstellt haben, gehen Sie in Ihr lokales Repository und löschen Sie alle Dateien in Ihrem /Bin/-Ordner und andere Dateien, die Sie nicht verfolgen möchten.
Pushen Sie dann auf lokal und synchronisieren Sie Ihren Code mit dem Server-Repository.
Hoffe das hilft.
Mir ist dasselbe passiert, ich habe alle meine Änderungen übernommen und erhalte den gleichen Fehler, wenn ich versuche, die Zweige zu wechseln.
Mir wurde klar, dass es eine Datei gab, die ich “ignorieren” wollte und die ich unter “Ausgeschlossene Änderungen” belassen hatte. Anscheinend handhabt VS2013 diese Ausschlüsse nicht richtig.
Nach vielen Versuchen bin ich auf eine einfache Lösung gekommen:
Ich habe die zu ignorierende Datei von „Ausgeschlossene Änderungen“ zu „Eingeschlossene Änderungen“ verschoben;
Ich habe ein lokales Commit gemacht;
Geschalteter Abzweig ohne Probleme;
Ibrahim ben Salah
Ich hatte keine Uncommit-Änderungen, hatte immer noch den gleichen Fehler, als ich die Zusammenführung zum Entwickeln durchführte. Ich habe es versucht:
git-Status und dann
git ziehen
Und dann versucht den Merge neu zu entwickeln und der Fehler taucht nicht mehr auf. Allerdings musste ich einige Konflikte lösen. Ich kann mir vorstellen, dass nur der zweite Befehl wirklich relevant ist, aber ich habe keine Ahnung, was hier passiert, also dokumentiere ich lieber alle Schritte.
Ich musste die Befehlszeilen-Tools herunterladen und konnte dort den Master-Zweig auschecken (der ihn auch in VS auscheckte). Ich habe dann einen Git-Pull durchgeführt, der dann zusätzliche Fehler aufgrund von Konflikten mit der Zusammenführung der Remote- und lokalen Branches hervorbrachte. Die Konflikte wurden behoben, festgeschrieben und dann synchronisiert, wodurch dieses Problem behoben wurde.
Sie müssen alle Ihre lokalen Änderungen festschreiben, dann ziehen und dann drücken.
– SLaks
20. Februar 2014 um 22:58 Uhr
Wenn ich versuche, zu ziehen, erhalte ich diese Fehlermeldung: Ein Fehler ist aufgetreten. Detaillierte Meldung: Von libgit2 wurde ein Fehler ausgelöst. Kategorie = Os (Fehler). „C:/Users/Walter/Source/Repos/JSDW_FTP_Project/FTPBoss/FTPBoss/bin/Debug/FTPBoss.vshost.exe“ konnte nicht zum Schreiben geöffnet werden: Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird.
– Walter Schultz
20. Februar 2014 um 23:05 Uhr
Es hört sich so an, als hättest du dich nicht wirklich verpflichtet alle Ihrer Änderungen. Mach ein
git status
(oder was auch immer gleichwertiges Visual Studio anbietet).– jdigital
20. Februar 2014 um 23:07 Uhr
Ich habe alle meine Änderungen übernommen, aber ich erhalte immer noch diesen Fehler: Ein Fehler ist aufgetreten. Detaillierte Meldung: Von libgit2 wurde ein Fehler ausgelöst. Kategorie = Os (Fehler). „C:/Users/Walter/Source/Repos/JSDW_FTP_Project/FTPBoss/FTPBoss/bin/Debug/FTPBoss.vshost.exe“ konnte nicht zum Schreiben geöffnet werden: Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird.
– Walter Schultz
20. Februar 2014 um 23:44 Uhr
@WalterSchultz: Du solltest das hinzufügen
bin
Verzeichnis zu.gitignore
, zusammen mit einer Reihe anderer Dateien. Siehe Ignorieren-Vorlage von GitHub.– SLaks
21. Februar 2014 um 1:20 Uhr