wake-up-neo.com

Wie kann man Git "vergessen", wenn eine Datei verfolgt wurde, die sich jetzt in .gitignore befindet?

Es gibt eine Datei, die von git verfolgt wurde, jetzt befindet sich die Datei in der Liste .gitignore.

Diese Datei wird jedoch nach der Bearbeitung in git status angezeigt. Wie zwingen Sie git, es vollständig zu vergessen?

4132
Ivan

.gitignore verhindert, dass nicht erfasste Dateien (ohne add -f) zu den von git verfolgten Dateien hinzugefügt werden. git verfolgt jedoch weiterhin alle Dateien, die bereits verfolgt werden.

Um das Verfolgen einer Datei zu beenden, müssen Sie sie aus dem Index entfernen. Dies kann mit diesem Befehl erreicht werden.

git rm --cached <file>

Das Entfernen der Datei aus der Kopfrevision erfolgt beim nächsten Commit.

WARNUNG: Während die physische Datei dadurch nicht von Ihrem lokalen Server entfernt wird, werden auf dem nächsten git pull die Dateien von anderen Entwicklermaschinen entfernt. 

4420
CB Bailey

Die Reihe der Befehle unten entfernt alle Elemente aus dem Git-Index (nicht aus dem Arbeitsverzeichnis oder dem lokalen Repo) und aktualisiert dann den Git-Index, wobei git ignore beachtet wird. PS. Index = Cache

Zuerst:

git rm -r --cached . 
git add .

Dann:

git commit -am "Remove ignored files"
2233
Matt Frear

git Update-Index erledigt den Job für mich:

git update-index --assume-unchanged <file>

Hinweis: Diese Lösung ist eigentlich unabhängig von .gitignore, da gitignore nur für nicht protokollierte Dateien gilt.

edit: Da diese Antwort veröffentlicht wurde, wurde eine neue Option erstellt, die bevorzugt werden sollte. Verwenden Sie --skip-worktree. Dies ist für geänderte verfolgte Dateien, die der Benutzer nicht mehr festschreiben möchte, und --assume-unchanged sollte aus Leistungsgründen beibehalten, um zu verhindern, dass git den Status großer verfolgter Dateien überprüft. Siehe https://stackoverflow.com/a/13631525/717372 für weitere Details ... 

git update-index --skip-worktree <file>
861
Konstantin
git ls-files --ignored --exclude-standard -z | xargs -0 git rm --cached
git commit -am "Remove ignored files"

Dadurch wird die Liste der ignorierten Dateien aus dem Index entfernt und die Änderungen werden übernommen.

241
thSoft

Ich verwende diesen Befehl immer zum Entfernen dieser nicht protokollierten Dateien. Einzeilig, Unix-Stil, saubere Ausgabe:

git ls-files --ignored --exclude-standard | sed 's/.*/"&"/' | xargs git rm -r --cached

Es listet alle Ihre ignorierten Dateien auf, ersetzen Sie jede Ausgabezeile durch eine in Anführungszeichen gesetzte Zeile, anstatt Pfade mit Leerzeichen zu behandeln, und übergeben Sie alles an git rm -r --cached, um die Pfade/Dateien/Verzeichnisse aus dem Index zu entfernen.

64
David Hernandez

Wenn Sie eine verfolgte Datei nicht git rmen können, weil andere Personen sie möglicherweise benötigen (Warnung, auch wenn yougit rm --cached, wenn eine andere Person diese Änderung erhält, werden ihre Dateien in ihrem Dateisystem gelöscht). Dies geschieht häufig aufgrund von Konfigurationsdatei-Überschreibungen, Authentifizierungsinformationen usw. Weitere Informationen finden Sie unter https://Gist.github.com/1423106 .

Zusammenfassen:

  • Lassen Sie Ihre Anwendung nach einer ignorierten Datei config-overide.ini suchen und verwenden Sie diese für die festgeschriebene Datei config.ini (oder suchen Sie alternativ nach ~/.config/myapp.ini oder $ MYCONFIGFILE).
  • Übertragen Sie die Datei config-sample.ini und ignorieren Sie die Datei config.ini, lassen Sie die Datei ggf. mit einem Skript oder einem ähnlichen Skript kopieren.
  • Versuchen Sie, gitattributes clean/smudge magic anzuwenden, um die Änderungen für Sie anzuwenden und zu entfernen. Zum Beispiel verwischen Sie die Konfigurationsdatei als Checkout von einem alternativen Zweig und bereinigen Sie die Konfigurationsdatei als Überprüfung von HEAD. Das ist kniffliges Zeug, ich empfehle es nicht für Anfänger.
  • Bewahren Sie die Konfigurationsdatei in einem dedizierten Bereitstellungszweig auf, der niemals mit dem Master zusammengeführt wird. Wenn Sie bereitstellen/kompilieren/testen möchten, werden Sie mit diesem Zweig zusammengeführt und erhalten diese Datei. Dies ist im Wesentlichen der Smudge/Clean-Ansatz, mit der Ausnahme, dass Merge-Richtlinien und Extra-Git-Module verwendet werden.
  • Anti-Empfehlung: Verwenden Sie nicht unverändert. Es enden nur in Tränen (denn wenn Sie sich anlügen, werden schlechte Dinge passieren, als würde Ihre Veränderung für immer verloren gehen).
53
Seth Robertson

verschiebe es, setze, dann verschiebe es wieder hinein. Das hat in der Vergangenheit für mich funktioniert. Es gibt wahrscheinlich eine bessere Methode, um dies zu erreichen.

50
Joel Hooks

Verwenden Sie dies, wenn:

1. Sie möchten viele Dateien abbrechen, oder

2. Sie haben Ihre Gitignore-Datei aktualisiert

Quelllink:http://www.codeblocq.com/2016/01/Untrack-files-already-added-to-git-repository-based-on-gitignore/

Angenommen, Sie haben bereits einige Dateien zu Ihrem Git-Repository hinzugefügt/festgelegt, und Sie fügen sie dann Ihrem .gitignore hinzu. Diese Dateien sind noch in Ihrem Repository-Index vorhanden. In diesem Artikel werden wir sehen, wie wir sie loswerden können.

Schritt 1: Übernehmen Sie alle Ihre Änderungen

Stellen Sie vor dem Fortfahren sicher, dass alle Ihre Änderungen festgeschrieben sind, einschließlich Ihrer .gitignore-Datei.

Schritt 2: Entfernen Sie alles aus dem Repository

Um Ihr Repo zu löschen, verwenden Sie:

git rm -r --cached .
  • rm ist der Befehl zum Entfernen
  • -r ermöglicht das rekursive Entfernen
  • –Cached entfernt nur Dateien aus dem Index. Ihre Dateien werden immer noch da sein.

Der Befehl rm kann unerbittlich sein. Wenn Sie das vorher ausprobieren möchten, fügen Sie das Flag -n oder --dry-run hinzu, um die Dinge zu testen.

Schritt 3: Alles neu hinzufügen

git add .

Schritt 4: Commit

git commit -m ".gitignore fix"

Dein Repository ist sauber :)

Drücken Sie die Änderungen auf Ihre Fernbedienung, um die Änderungen auch dort zu sehen.

44
Dheeraj Bhaskar

Was für mich nicht funktioniert hat

(Unter Linux) wollte ich die Beiträge verwenden, die den ls-files --ignored --exclude-standard | xargs git rm -r --cached-Ansatz vorschlagen. (Einige der zu entfernenden Dateien hatten jedoch eine eingebettete Zeilenvorschubdatei/LF/\n). Keine der Lösungen:

git ls-files --ignored --exclude-standard | xargs -d"\n" git rm --cached
git ls-files --ignored --exclude-standard | sed 's/.*/"&"/' | xargs git rm -r --cached

bewältigen Sie diese Situation (erhalten Sie Fehler über nicht gefundene Dateien).

Also biete ich an

git ls-files -z --ignored --exclude-standard | xargs -0 git rm -r --cached

Dies verwendet das -z-Argument für ls-files und das -0-Argument für xargs , um sicher/korrekt für "böse" Zeichen in Dateinamen zu sorgen.

In der Manualpage git-ls-files (1) heißt es:

Wenn die Option -z nicht verwendet wird, werden TAB-, LF- und Backslash-Zeichen in .__ angezeigt. Pfadnamen werden als\t,\n bzw. \\ dargestellt.

ich denke, meine Lösung ist notwendig, wenn Dateinamen diese Zeichen enthalten.

BEARBEITEN: Ich wurde gebeten, das hinzuzufügen - wie jeder git rm-Befehl - diesem muss ein commit folgen, um die Entfernungen dauerhaft zu machen, z. git commit -am "Remove ignored files".

38
JonBrave

Ich habe dies mit git filter-branch erreicht. Der genaue Befehl, den ich verwendet habe, wurde von der Manpage übernommen:

WARNING: Die Datei wird aus dem gesamten Verlauf gelöscht

git filter-branch --index-filter 'git rm --cached --ignore-unmatch filename' HEAD

Dieser Befehl erstellt die gesamte Festschreibungshistorie neu und führt vor jedem Festschreiben git rm aus. Dadurch wird die angegebene Datei gelöscht. Vergessen Sie nicht, es zu sichern, bevor Sie den Befehl ausführen, da Wille.

36
drrlvn
  1. Aktualisieren Sie Ihre .gitignore-Datei - fügen Sie beispielsweise einen Ordner hinzu, den Sie nicht nachverfolgen möchten, zu .gitignore.

  2. git rm -r --cached . - Entfernen Sie alle verfolgten Dateien, einschließlich gewünschter und unerwünschter Dateien. Ihr Code ist sicher, solange Sie lokal gespeichert haben.

  3. git add . - Alle Dateien werden wieder hinzugefügt, mit Ausnahme der Dateien in .gitignore.


Hat @AkiraYamamoto einen Tipp, dass Sie uns in die richtige Richtung weisen.

18
Chen_Wayne

Ich denke, dass git die Datei aufgrund ihrer Konzeption möglicherweise nicht ganz vergessen kann ( Abschnitt "Snapshots, Not Differences" ).

Dieses Problem ist beispielsweise bei der Verwendung von CVS nicht vorhanden. CVS speichert Informationen als Liste dateibasierter Änderungen. Informationen für CVS sind eine Reihe von Dateien und die im Laufe der Zeit an jeder Datei vorgenommenen Änderungen.

Bei jedem Commit oder Speichern des Status Ihres Projekts in Git wird jedoch im Wesentlichen ein Bild von all Ihren Dateien erstellt, und es wird ein Verweis auf diesen Snapshot gespeichert. Wenn Sie also eine Datei einmal hinzugefügt haben, ist sie immer in diesem Schnappschuss vorhanden.

Diese 2 Artikel waren hilfreich für mich:

git angenommen-unverändert vs skip-worktree und So ignorieren Sie Änderungen in nachverfolgten Dateien mit Git

Darauf basierend mache ich Folgendes, wenn die Datei bereits verfolgt ist:

git update-index --skip-worktree <file>

Ab diesem Zeitpunkt werden alle lokalen Änderungen in dieser Datei ignoriert und gehen nicht in die Ferne über. Wenn die Datei auf der Fernbedienung geändert wird, tritt ein Konflikt auf, wenn git pull. Stash funktioniert nicht. Kopieren Sie den Inhalt der Datei an den sicheren Ort, und führen Sie die folgenden Schritte aus:

git update-index --no-skip-worktree <file>
git stash
git pull 

Der Dateiinhalt wird durch den Remote-Inhalt ersetzt. Fügen Sie Ihre Änderungen von einem sicheren Ort in eine Datei ein und führen Sie sie erneut aus:

git update-index --skip-worktree <file>

Wenn jeder, der mit project arbeitet, git update-index --skip-worktree <file> ausführt, sollten Probleme mit pull fehlen. Diese Lösung ist für Konfigurationsdateien in Ordnung, wenn jeder Entwickler über eine eigene Projektkonfiguration verfügt.

Es ist nicht sehr praktisch, dies jedes Mal zu tun, wenn die Datei auf der Fernbedienung geändert wurde, sie kann jedoch vor dem Überschreiben durch Ferninhalt schützen.

13
Boolean_Type

Führen Sie die folgenden Schritte der Reihe nach durch.

1 .entfernen die versehentlich hinzugefügten Dateien aus dem Verzeichnis/storage. Sie können den Befehl "rm -r" (für Linux) verwenden oder durch das Durchsuchen der Verzeichnisse löschen. Oder verschieben Sie sie an einen anderen Ort auf Ihrem PC. [Sie müssen möglicherweise die IDE schließen, wenn Sie für Verschieben/Entfernen] laufen.

2. Fügen Sie die Dateien/Verzeichnisse jetzt der gitignore-Datei hinzu und speichern Sie sie.

3.mit entfernen von git cache mithilfe dieser Befehle (wenn mehrere Verzeichnisse vorhanden sind, entfernen Sie sie nacheinander, indem Sie diesen Befehl wiederholt ausführen).

git rm -r --cached path-to-those-files

4.Wenn do a commit und Push, verwenden Sie diese Befehle. Dadurch werden diese Dateien von git remote entfernt, und git stop stoppt diese Dateien.

git add .
git commit -m "removed unnecessary files from git"
git Push Origin

Die Antwort zum Kopieren/Einfügen lautet git rm --cached -r .; git add .; git status

Dieser Befehl ignoriert die Dateien, die bereits an ein Git-Repository übergeben wurden. Jetzt haben wir sie zu .gitignore hinzugefügt.

5
youhans

Die Antwort von Matt Fear war der effektivste IMHO. Das Folgende ist nur ein PowerShell-Skript für Windows-Benutzer, das nur Dateien aus ihrem Git-Repo entfernt, die der Ausschlussliste entsprechen.

# Get files matching exclusionsfrom .gitignore
# Excluding comments and empty lines
$ignoreFiles =  gc .gitignore | ?{$_ -notmatch  "#"} |  ?{$_ -match  "\S"} | % {
                    $ignore = "*" + $_ + "*"
                    (gci -r -i $ignore).FullName
                }
$ignoreFiles = $ignoreFiles| ?{$_ -match  "\S"}

# Remove each of these file from Git 
$ignoreFiles | % { git rm $_}

git add .
5
Ameer Deen

Verschieben oder kopieren Sie die Datei an einen sicheren Ort, damit Sie sie nicht verlieren. Dann git rm die Datei und Commit. Die Datei wird weiterhin angezeigt, wenn Sie zu einem dieser früheren Commits oder einem anderen Zweig zurückkehren, in dem sie nicht entfernt wurde. Bei allen zukünftigen Commits wird die Datei jedoch nicht mehr angezeigt. Wenn sich die Datei in git ignore befindet, können Sie sie wieder in den Ordner verschieben, und git wird sie nicht sehen.

5
Apreche

Das BFG wurde speziell für das Entfernen unerwünschter Daten wie großer Dateien oder Passwörter aus Git-Repos entwickelt. Daher gibt es ein einfaches Flag, das alle großen historischen Dateien (nicht in Ihrem aktuellen Commit) entfernt: --strip-blobs-größer als

$ Java -jar bfg.jar --strip-blobs-bigger-than 100M

Wenn Sie Dateien nach Namen angeben möchten, können Sie dies auch tun:

$ Java -jar bfg.jar --delete-files *.mp4

Das BFG ist 10-1000-mal schneller als Git-Filter-Zweig und in der Regel viel einfacher zu verwenden. Weitere Informationen finden Sie in den vollständigen Gebrauchsanweisungen und Beispielen .

Quelle: https://confluence.atlassian.com/bitbucket/reduce-repository-size-321848262.html

3
Meir Gerenstadt

Wenn Sie die CLI nicht verwenden möchten und unter Windows arbeiten, ist die Verwendung von TortoiseGit eine sehr einfache Lösung. Sie enthält die Aktion "Löschen (Keep local)" im Menü, die einwandfrei funktioniert.

2
Pedi T.

Ich mochte die Antwort von JonBrave, aber ich habe genug Arbeitsverzeichnisse, die begehen - ein bisschen ängstlich für mich, also habe ich Folgendes getan:

git config --global alias.exclude-ignored '! git ls-files -z --ignored --exclude-standard | xargs -0 git rm -r --cached && git ls-files -z --ignored --exclude-standard | xargs -0 git stage && git stage .gitignore && git commit -m "Neuer Gititore und entfernte ignorierte Dateien aus dem Index" "

brechen sie ab:

git ls-files -z --ignored --exclude-standard | xargs -0 git rm -r --cached 
git ls-files -z --ignored --exclude-standard | xargs -0 git stage 
git stage .gitignore 
git commit -m "new gitignore and remove ignored files from index"
  • ignorierte Dateien aus dem Index entfernen
  • bühne .gitignore und die Dateien, die Sie gerade entfernt haben
  • verpflichten
2
Jay Irvine

Dies ist in der neuesten Version von git (v2.17.1 zum Zeitpunkt des Schreibens) kein Thema mehr.

Der .gitignore ignoriert schließlich verfolgte, aber gelöschte Dateien. Sie können dies selbst testen, indem Sie das folgende Skript ausführen. Die abschließende git status-Anweisung sollte "nichts zu übergeben" melden.

# Create empty repo
mkdir gitignore-test
cd gitignore-test
git init

# Create a file and commit it
echo "hello" > file
git add file
git commit -m initial

# Add the file to gitignore and commit
echo "file" > .gitignore
git add .gitignore
git commit -m gitignore

# Remove the file and commit
git rm file
git commit -m "removed file"

# Reintroduce the file and check status.
# .gitignore is now respected - status reports "nothing to commit".
echo "hello" > file
git status
1
Lloyd

Speziell für die IDE-basierten Dateien verwende ich Folgendes:

Zum Beispiel die slnx.sqlite, ich habe sie gerade komplett wie folgt entfernt:

git rm {PATH_OF_THE_FILE}/slnx.sqlite -f
git commit -m "remove slnx.sqlite"

Denken Sie jedoch daran, dass in einigen dieser Dateien lokale Benutzereinstellungen und Voreinstellungen für Projekte gespeichert sind (z. B. welche Dateien Sie geöffnet hatten). Jedes Mal, wenn Sie in Ihrer IDE navigieren oder Änderungen vornehmen, wird diese Datei geändert. Daher wird sie ausgecheckt und angezeigt, wenn nicht festgeschriebene Änderungen vorliegen.

1
curiousBoy

Mit dem Befehl git rm --cached wird die ursprüngliche Frage nicht beantwortet:

Wie können Sie git zwingen, [eine Datei] vollständig zu vergessen?

Tatsächlich bewirkt diese Lösung, dass die Datei in jeder anderen Instanz des Repositorys gelöscht wird, wenn ein git pull ausgeführt wird!

Der richtige Weg, Git zu zwingen, eine Datei zu vergessen, wird von GitHub hier dokumentiert.

Ich empfehle die Dokumentation zu lesen, aber grundsätzlich:

git fetch --all
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch full/path/to/file' --Prune-empty --tag-name-filter cat -- --all
git Push Origin --force --all
git Push Origin --force --tags
git for-each-ref --format='delete %(refname)' refs/original | git update-ref --stdin
git reflog expire --expire=now --all
git gc --Prune=now

ersetzen Sie einfach full/path/to/file durch den vollständigen Pfad der Datei. Stellen Sie sicher, dass Sie die Datei zu Ihrem .gitignore hinzugefügt haben.

Sie müssen auch (vorübergehend) Pushs ohne Schnellvorlauf in Ihr Repository zulassen , da Sie Ihren Git-Verlauf ändern.

1
Skeets

Bei bereits zugesagtem DS_Store:

find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch

Ignoriere sie durch:

echo ".DS_Store" >> ~/.gitignore_global
echo "._.DS_Store" >> ~/.gitignore_global
echo "**/.DS_Store" >> ~/.gitignore_global
echo "**/._.DS_Store" >> ~/.gitignore_global
git config --global core.excludesfile ~/.gitignore_global

Zum Schluss noch ein Commit!

0
user7718859

Diese Methode bewirkt, dass git ignorierte Dateien ( past /present/future) vollständig vergisst, aber not lösche irgendetwas aus dem Arbeitsverzeichnis (auch wenn es erneut von der Fernbedienung gezogen wird).

Diese Methode erfordert die Verwendung von /.git/info/exclude (bevorzugt) ODER a bereits vorhanden .gitignore in all die Commits, deren Dateien ignoriert/vergessen werden müssen. 1

Alle Methoden zur Erzwingung von Git ignorieren das Verhalten nach dem Faktum und schreiben den Verlauf effektiv neu. Sie haben daher signifikante Auswirkungen für alle öffentlichen/gemeinsam genutzten/kollaborativen Repos, die nach diesem Prozess möglicherweise abgerufen werden. 2

Allgemeiner Hinweis: Beginnen Sie mit einem sauberen Repo - alles festgeschrieben, nichts in Arbeitsverzeichnis oder Index anstehend, und machen Sie ein Backup !

Auch die Kommentare/ Änderungshistorie von diese Antwort ​​( nd Änderungshistorie von diese Frage ) können nützlich sein/erleuchtend.

#commit up-to-date .gitignore (if not already existing)
#this command must be run on each branch

git add .gitignore
git commit -m "Create .gitignore"

#apply standard git ignore behavior only to current index, not working directory (--cached)
#if this command returns nothing, ensure /.git/info/exclude AND/OR .gitignore exist
#this command must be run on each branch

git ls-files -z --ignored --exclude-standard | xargs -0 git rm --cached

#Commit to prevent working directory data loss!
#this commit will be automatically deleted by the --Prune-empty flag in the following command
#this command must be run on each branch

git commit -m "ignored index"

#Apply standard git ignore behavior RETROACTIVELY to all commits from all branches (--all)
#This step WILL delete ignored files from working directory UNLESS they have been dereferenced from the index by the commit above
#This step will also delete any "empty" commits.  If deliberate "empty" commits should be kept, remove --Prune-empty and instead run git reset HEAD^ immediately after this command

git filter-branch --tree-filter 'git ls-files -z --ignored --exclude-standard | xargs -0 git rm -f --ignore-unmatch' --Prune-empty --tag-name-filter cat -- --all

#List all still-existing files that are now ignored properly
#if this command returns nothing, it's time to restore from backup and start over
#this command must be run on each branch

git ls-files --other --ignored --exclude-standard

Folgen Sie abschließend dem Rest von dieser GitHub-Anleitung (beginnend mit Schritt 6) , das wichtige Warnungen/Informationen zu den folgenden Befehlen enthält .

git Push Origin --force --all
git Push Origin --force --tags
git for-each-ref --format="delete %(refname)" refs/original | git update-ref --stdin
git reflog expire --expire=now --all
git gc --Prune=now

Andere Entwickler, die aus dem jetzt geänderten Remote-Repo ziehen, sollten ein Backup erstellen und dann:

#fetch modified remote

git fetch --all

#"Pull" changes WITHOUT deleting newly-ignored files from working directory
#This will overwrite local tracked files with remote - ensure any local modifications are backed-up/stashed
#Switching branches after this procedure WILL LOOSE all newly-gitignored files in working directory because they are no longer tracked when switching branches

git reset FETCH_HEAD

Fußnoten

1 Da /.git/info/exclude mit den obigen Anweisungen auf alle historischen Festschreibungen angewendet werden kann, werden möglicherweise Details zum Einfügen einer .gitignore -Datei in die erforderlichen historischen Festschreibungen angezeigt Das würde den Rahmen dieser Antwort sprengen. Ich wollte einen richtigen .gitignore im Root-Commit haben, als wäre es das erste, was ich tat. Anderen ist das vielleicht egal, da /.git/info/exclude dasselbe erreichen kann, unabhängig davon, wo der .gitignore im Festschreibungsverlauf vorhanden ist, und das eindeutige Neuschreiben des Verlaufs ist ein sehr heikles Thema, auch wenn die Auswirkungen .

In Zukunft können mögliche Methoden git rebase oder git filter-branch enthalten, die ein externes .gitignore in jedes Commit kopieren, wie die Antworten auf diese Frage

2 Das Erzwingen des Ignorierens von Git nachträglich durch Festschreiben der Ergebnisse eines eigenständigen git rm --cached -Befehls kann dazu führen, dass die Datei - Löschung in Zukunft zwangsweise vom Push gezogen wird Fernbedienung. Das --Prune-empty -Flag im folgenden git filter-branch -Befehl vermeidet dieses Problem, indem das vorherige Nur-Index-Commit "Alle ignorierten Dateien löschen" automatisch entfernt wird. Das Neuschreiben der Git-Historie ändert auch die Commit-Hashes, was Chaos anrichten bei zukünftigen Zugriffen von öffentlichen/geteilten/kollaborativen Repos. Bitte verstehen Sie die Auswirkungen vollständig, bevor Sie dies für ein solches Repo tun. Diese GitHub Anleitung spezifiziert Folgendes:

Weisen Sie Ihre Mitarbeiter an, rebase , keine Zusammenführung von Zweigen vorzunehmen, die sie aus Ihrem alten (beschädigten) Repository-Verlauf erstellt haben. Ein Merge-Commit könnte einen Teil oder die gesamte verdorbene Historie wieder einführen, die Sie gerade gelöscht haben.

Alternative Lösungen, die nicht das Remote-Repo betreffen, sind git update-index --assume-unchanged </path/file> oder git update-index --skip-worktree <file>, wofür Beispiele zu finden sind hier .

0
goofology