2013-03-01 7 views
7

Ich habe ein Git-Problem, wo ich eine Verzweigung in Master zusammenführen möchte, aber es verweigert, da es denkt, dass ich lokale Änderungen an einer Datei habe. Doing Status zeigt keine Änderungen und Diffing die Dateien produziert nichts. Hier ist die Terminal-Ausgabe:Git weigert sich, wegen Änderungen an einer unveränderten Datei zusammenzuführen

$ git checkout ProductsAndContents 
Switched to branch 'ProductsAndContents' 

$ git status 
# On branch ProductsAndContents 
nothing to commit (working directory clean) 

$ git checkout master 
Switched to branch 'master' 

$ git status 
# On branch master 
nothing to commit (working directory clean) 

$ git merge ProductsAndContents 
error: Your local changes to the following files would be overwritten by merge: 
    tests/unit/src/models/BrandTests.js 
Please, commit your changes or stash them before you can merge. 
Aborting 

Jede Hilfe oder Vorschläge würden am meisten geschätzt werden!

+1

Haben Sie es irgendwie geschafft, diese Datei in die '.git/info/exclude'-Datei oder eine' .gitignore'-Datei zu speichern? –

+2

Helfen die Konfigurationsoptionen in [diese Antwort] (http://stackoverflow.com/a/12167041/166732)? – asm

+0

Hallo Andrew, das Setzen von 'core.trustctime' auf false scheint es getan zu haben. Danke, dass Sie mich in die richtige Richtung weisen :) –

Antwort

3

Dank Andrew Myers Kommentar zu meiner ersten Frage, entdeckte ich die Einstellung core.trustctimefalse das Problem gelöst.

git config core.trustctime false 

Etwas über nicht übereinstimmende Inode Wechselzeiten. Ich vermute, das liegt daran, dass das Repo auf einer Dateifreigabe auf einem Computer mit einem anderen Dateisystem als dem, das ich verwende, sitzt.

Danke für alle Vorschläge!

-2

Nur weil jeder Zweig nichts zu begehen hat, bedeutet das nicht, dass sie gleich sind. Ich würde bei der Betrachtung der Unterschiede zwischen den beiden Dateien interessiert sein

git diff 

verwenden Sie können auf die Revision zurückkommen, die

an den Repo-komprimittiert wurde
git checkout -- tests/unit/src/models/BrandTests.js 
+3

'Bitte, legen Sie Ihre Änderungen fest oder speichern Sie sie, bevor Sie zusammenführen können. 'Impliziert nicht festgeschriebene Änderungen, keine festgeschriebenen Diffs zwischen Zweigen –

+0

Es gibt wirklich keine Änderungen zu committen, und keine nicht aufgezeichneten Dateien. Wie ich bereits erwähnt habe, produziert Diffing Null. Ich bin verwirrt. –

1

Nun verwenden, wenn Sie sicher sind Sie gewonnen Verliere keine Arbeit, versuche folgendes:

rm tests/unit/src/models/BrandTests.js 
git checkout -- tests/unit/src/models/BrandTests.js 

Das sollte jeden Mechanismus zurücksetzen, der es denken ließ, dass es Änderungen hatte. Wenn es nicht funktioniert, haben Sie vielleicht andere.

+0

Danke für den Vorschlag Trev! Ich habe das versucht, aber leider gibt es immer noch den gleichen Fehler. So seltsam ... –

+0

Ich habe auch das entdeckt, aber es scheint, dass 'git stash' sich weigern würde, eine Datei als modifiziert zu sehen. Ich habe es manuell gesichert, überprüft und die Änderungen manuell verglichen. Es muss einen besseren Weg geben ... –

+0

@PaulLammertsma Vergessen Sie nicht, dass ein 'Stash' nichts anderes als ein anderes Commit ist und seinen eigenen Hash hat. Sie können damit genauso arbeiten wie mit jedem anderen Commit. Was viele andere Möglichkeiten übrig lässt. Ich hatte gerade das oben genannte als das schnellste gefunden. –

1

Ich würde vermuten, das ist Ihr Szenario:

$ git checkout ProductsAndContents 
Switched to branch 'ProductsAndContents' 

Zweig ProductsAndContents die Datei tests/unit/src/models/BrandTests.js enthält, so dass die obigen checkout es erstellt und/oder sorgt dafür, dass es auf dem neuesten Stand ist mit dem spezifischen Festschreibung angefordert.

$ git status 
# On branch ProductsAndContents 
nothing to commit (working directory clean) 

Sie haben keine Änderungen vorgenommen und haben mit einem sauberen Arbeitsverzeichnis begonnen, das ist also gut.

$ git checkout master 
Switched to branch 'master' 

Dies stellt sicher, dass alle Dateien in spätestens master auf dem neuesten Stand Verzeichnis im Arbeits sind verpflichten enthalten. Es werden jedoch keine Dateien entfernt oder aktualisiert, die nicht in master enthalten sind oder die ignoriert werden. Hier gehe ich davon aus, dass master aus welchem ​​Grund auch immer die fragliche Datei nicht enthält.

$ git status 
# On branch master 
nothing to commit (working directory clean) 

Auch hier haben Sie keine Änderungen vorgenommen. Die Tatsache, dass die fragliche Datei hier nicht als eine nicht aufgezeichnete Datei erwähnt wird, bedeutet wahrscheinlich, dass sie ignoriert wird (entweder in .gitignore oder in .git/info/exclude). master enthält die Datei nicht, so dass sie nicht betroffen ist.

$ git merge ProductsAndContents 
error: Your local changes to the following files would be overwritten by merge: 
    tests/unit/src/models/BrandTests.js 
Please, commit your changes or stash them before you can merge. 
Aborting 

Hier Ihr Versuch, in dem anderen Zweig zusammenführen will eine Datei vorstellen, dass master hat derzeit nicht, die in der Regel in Ordnung ist. Diese Datei existiert jedoch in Ihrem Arbeitsverzeichnis, und git möchte nicht etwas zerstören, von dem nicht sicher ist, ob es im Repository aufbewahrt wird. Wie an anderer Stelle empfohlen, können Sie (vorausgesetzt, Sie wissen, dass es sicher ist) diese Datei einfach entfernen und die Zusammenführung erneut versuchen.

Mit den Informationen, die Sie gegeben haben, bin ich nicht 100% sicher, dass das, was Sie hier haben; Sie können diese beiden Befehle ausführen für diesen Zustand zu überprüfen, aber:

git ls-files master -- tests/unit/src/models/BrandTests.js 
git ls-files ProductsAndContents -- tests/unit/src/models/BrandTests.js 

Wenn meine Vermutung richtig ist, wird der erste Befehl nicht nachgewiesen, dass die Datei vorhanden ist, während der zweite Willen. Überprüfen Sie dann .gitignore und .git/info/exclude, um zu sehen, ob es ignoriert wird (für .gitignore müssen Sie möglicherweise die Version überprüfen, die in jedem der beiden Zweige vorhanden ist).

+0

Danke! Leider befindet sich die Datei in beiden Zweigen und nicht in .gitignore oder .git/info/exclude. Hier ist die Ausgabe: $ git ls-Dateien Master - Tests/Einheit/src/models/BrandTests.js Tests/Einheit/src/models/BrandTests.js $ git ls-Dateien ProductsAndContents - Tests/Einheit/src/models/BrandTests.js Tests/Einheit/src/models/BrandTests.js –