737 Stimmen

Die folgenden nicht verfolgten Arbeitsbaumdateien würden durch die Zusammenführung überschrieben werden, aber das ist mir egal

In meinem Zweig hatte ich einige Dateien in .gitignore

In einem anderen Zweig sind diese Dateien nicht vorhanden.

Ich möchte den anderen Zweig mit meinem zusammenführen, und es ist mir egal, ob diese Dateien nicht mehr ignoriert werden oder nicht.

Leider bekomme ich das:

Die folgenden nicht verfolgten Arbeitsbaumdateien würden durch die Zusammenführung überschrieben werden

Wie kann ich meinen Pull-Befehl so ändern, dass er diese Dateien überschreibt, ohne dass ich diese Dateien selbst suchen, verschieben oder löschen muss?

28voto

Amr Mohammed Punkte 573

Sie können diesen Befehl ausprobieren

git clean -df

EDIT: Bitte beachten Sie, dass dabei die nicht verfolgten Dateien gelöscht werden, die wertvoll sein können. Dank an @zhekaus

17voto

Ashish Chaugule Punkte 1379

Schritt 1: Bereinigung der Arbeitskopie

a) Speichern lokaler Änderungen in einem Stash Wenn Sie Ihre lokalen Änderungen aufbewahren möchten, können Sie sie sicher in einem Zwischenspeicher ablegen. Sie sind dann verfügbar, falls Sie sie zu einem späteren Zeitpunkt wieder benötigen.

$ git stash --include-untracked

b) Verwerfen von lokalen Änderungen Wenn Sie sicher sind, dass Sie sie nicht mehr benötigen, können Sie Ihre lokalen Änderungen vollständig verwerfen:

$ git reset --hard

c) Wenn Sie auch nicht verfolgte/neue Dateien haben, müssen Sie den Befehl "git clean" verwenden, um auch diese loszuwerden:

$ git clean -fd

Schritt 2: Erneut ziehen Nachdem Sie alle lokalen Änderungen / nicht verfolgten Dateien, die überschrieben worden wären, bereinigt haben, wird der Pull-Vorgang endlich funktionieren:

$ git pull

16voto

mnagel Punkte 6179

Wenn es sich um einen einmaligen Vorgang handelt, können Sie einfach alle nicht verfolgten Dateien aus dem Arbeitsverzeichnis entfernen, bevor Sie den Pull-Vorgang durchführen. Lesen Wie entfernt man lokale (nicht verfolgte) Dateien aus dem aktuellen Git-Arbeitsbaum? um zu erfahren, wie Sie alle nicht verfolgten Dateien entfernen können.

Achten Sie darauf, dass Sie nicht versehentlich nicht verfolgte Dateien entfernen, die Sie noch benötigen ;)

14voto

matt Punkte 4494

Update - eine bessere Version

Dieses Werkzeug ( https://github.com/mklepaczewski/git-clean-before-merge ) wird:

  • nicht verfolgte Dateien löschen, die identisch sind mit ihren git pull Äquivalente,
  • Änderungen an geänderten Dateien rückgängig zu machen, deren geänderte Version identisch ist mit ihrer git pull Äquivalente,
  • geänderte/unverfolgte Dateien melden, die sich von ihren git pull Version,
  • das Werkzeug hat die --pretend Option, die keine Dateien verändert.

Alte Fassung

Wie unterscheidet sich diese Antwort von anderen Antworten?

Die hier vorgestellte Methode entfernt nur Dateien, die durch die Zusammenführung überschrieben werden würden. Wenn Sie andere nicht verfolgte (möglicherweise ignorierte) Dateien in dem Verzeichnis haben, werden diese mit dieser Methode nicht entfernt.

Die Lösung

Dieses Snippet extrahiert alle nicht verfolgten Dateien, die von git pull und löschen Sie sie.

git pull 2>&1|grep -E '^\s'|cut -f2-|xargs -I {} rm -rf "{}"

und dann einfach tun:

git pull

Dies ist kein Git-Porzellan-Befehl, also überprüfen Sie immer, was er mit tun würde:

git pull 2>&1|grep -E '^\s'|cut -f2-|xargs -I {} echo "{}"

Erklärung - weil Einzeiler beängstigend sind:

Hier ist eine Aufschlüsselung der Funktionen:

  1. git pull 2>&1 - Erfassung git pull ausgeben und alles nach stdout umleiten, so dass wir es leicht erfassen können mit grep .
  2. grep -E '^\s - die Absicht ist, die Liste der nicht verfolgten Dateien zu erfassen, die durch git pull . Die Dateinamen haben eine Reihe von Leerzeichen vorangestellt, die wir nutzen, um sie zu erhalten.
  3. cut -f2- - Leerzeichen am Anfang jeder in 2 erfassten Zeile entfernen.
  4. xargs -I {} rm -rf "{}" - uns xargs um alle Dateien zu durchlaufen, ihre Namen in "{}" zu speichern und die rm für jeden von ihnen. Wir verwenden -rf um das Löschen zu erzwingen und nicht verfolgte Verzeichnisse zu entfernen.

Es wäre toll, die Schritte 1-3 durch ein Porzellan-Kommando zu ersetzen, aber ich kenne keine gleichwertige Lösung.

13voto

Michał Szkudlarek Punkte 1295

Weder clean/reset/hard checkout/rebase hat bei mir funktioniert.

Ich habe also nur die Dateien entfernt, über die sich Git beschwert hat*.

rm /path/to/files/that/git/complained/about

*Ich habe überprüft, ob diese Dateien entfernt werden können, indem ich eine brandneue Repo in einem separaten Ordner ausgecheckt habe (die Dateien waren nicht da)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X