2015-02-24 3 views
8

Wie unstaged Änderungen lösen nicht durch „git status“ gezeigt

$ git status 
On branch chore/nbsp-fix-2 
nothing to commit, working directory clean 
$ git rebase -i master 
Cannot rebase: You have unstaged changes. 
Please commit or stash them. 

Betrachten Wie kann ich herausfinden, was die unstaged Veränderungen, die git von Rebasieren verhindern?

Hintergrund: Jemand hat Dateien mit einem nicht beschädigten Leerzeichen (% A0) im Namen hinzugefügt. Dies hat Probleme mit dem Repository verursacht. Die Dateien werden als nicht verfolgt angezeigt und git denkt, dass das Repository schmutzig ist - ein ähnliches Problem.

Die Technik, die ich verwendet habe, um das Problem zu beheben, ist, einen neuen Zweig zu erstellen, bevor diese Änderungen vorgenommen wurden, und die paar Commits nach diesen Änderungen auszuwählen. Leider bin ich jetzt in dieser Situation. Ich kann mir vorstellen, dass es noch eine andere Datei oder einen anderen Rest dieses Problems gibt, die mich davon abhält, vorwärts zu gehen. Ich bin jetzt in dieser Position, nachdem ich die einzelnen Commits nach den schlechten Dateinamen herausgepickt habe.

Ich bin auf der Suche nach Vorschlägen für die Überwindung dieses Problems. Was ist ein Rebase, den der Status nicht sieht?

+1

Versuchen Sie 'git diff-files', was ist das? Das überprüft Rebase. – jthill

+0

@jthill, geben Sie eine richtige Antwort und ich gebe Ihnen Kredit. 'git diff-files' (und' git diff') lieferten die Antwort. –

+0

Wie ist es passiert? Ich bin daran gewöhnt, dass es sich um eine nicht verfolgte und ignorierte Datei handelt, deren Status ignoriert wird, aber in einem neuen Checkout nachverfolgt wird, und deshalb weigert sich git, darauf zu stampfen, aber das ist nicht, was hier passiert ist und ich bin gespannt was passiert ist. – jthill

Antwort

3

Es stellte sich heraus git rebase ist ein Shell-Skript in /usr/libexec/git-core/git-rebase, greppen für "haben unstaged Änderungen" in diesem Verzeichnis bekommt genau einen Treffer, in git-sh-setup, in dieser Funktion:

require_clean_work_tree() { 
    git rev-parse --verify HEAD >/dev/null || exit 1 
    git update-index -q --ignore-submodules --refresh 
    err=0 

    if ! git diff-files --quiet --ignore-submodules 
    then 
     echo >&2 "Cannot $1: You have unstaged changes." 
     err=1 
    fi 

[ ... ] 

und rebase das macht berufen. Also, zu antworten

Was ist Rebase sehen, dass der Status nicht sehen?

Ihre Frage, versuchen Sie git diff-files.

+0

Danke, das habe ich gesucht. 'git diff' und' git diff-files' zeigten, dass es eine Datei mit 0 Länge gab, die von git-fat verwaltet wurde und das Problem verursachte. Es gibt einen Fehler mit gefilterten Dateien der Länge 0. –

+0

Im Bericht ist sogar ein Patch enthalten. Ich habe eine Pull-Anfrage dafür gemacht. – jthill

+0

So habe ich herausgefunden, was das Problem war. Ich kann überprüfen, dass die Änderung auch das Problem behebt. –

Verwandte Themen