2016-11-23 3 views
1

Ich entwickle mich auf einer anderen Maschine als ich es normalerweise tue, und es scheint, dass git sich anders benimmt als ich mich erinnern kann. git status und git diff leer nach fehlgeschlagenem git bin

Als ich Kasse eine Niederlassung git checkout -b <new branch name>, und versuchen, einen Patch git am </path/to/file.patch> anzuwenden, schlägt der Patch einzuspielen:

</path/to/file.patch> 
Applying: <commit msg> 
error: patch failed: <filename>:<line no> 
error: <filename>: patch does not apply 
Patch failed at <commit msg> 
The copy of the patch that failed is found in: .git/rebase-apply/patch 
When you have resolved this problem, run "git am --continue". 
If you prefer to skip this patch, run "git am --skip" instead. 
To restore the original branch and stop patching, run "git am --abort". 

Jetzt habe ich auf meinem anderen Maschinen schwören, wenn ein Patch anzuwenden ausfällt, git status und git diff zeigt die Datei als modifiziert mit <<<HEAD>>>> Markierungen, die zeigen, wo ich die Drei-Wege-Zusammenführung reparieren muss. Derzeit git status zeigt, ich bin in der Mitte einer Operation, aber keine Dateien geändert, wie auch git diff.

Kann ich mich nicht erinnern, oder hat meine andere Maschine vielleicht eine ältere Version von git oder sogar eine andere Konfigurationsoption? Warum zeigt git keinen Merge-Konflikt? Muss ich ein Mergetool einstellen? Ich habe im Moment keinen Zugriff auf meine andere Maschine, aber ich werde versuchen, diesen Beitrag mit mehr Informationen zu aktualisieren, wenn ich kann.

edit:

git am --3way scheint zu sein, was ich will. [0] [1] Aber weder git am --3way <path/to/patch> noch git config --global am.threeWay true scheinen zu funktionieren.

ah, es mit einer anderen Nachricht versagt jetzt:

</path/to/file.patch> 
Applying: <commit msg> 
fatal: sha1 information is lacking or useless (<filename>).   <-- new 
error: could not build fake ancestor         <-- new 
Patch failed at <commit msg> 
The copy of the patch that failed is found in: .git/rebase-apply/patch 
When you have resolved this problem, run "git am --continue". 
If you prefer to skip this patch, run "git am --skip" instead. 
To restore the original branch and stop patching, run "git am --abort". 

Similary, git am --3way </path/to/patch> schlägt mit:

error: patch failed: <file>:<lineno> 
error: repository lacks the necessary blob to fall back on 3-way merge. 
error: Makefile: patch does not apply 

dieser Patch Vielleicht unkündbar ist? Der Zugriff auf patch -p1 < </path/to/path> gilt das erste Stück und schlägt für das zweite fehl, also denke ich, dass ich das nur von Hand machen muss.

Ich sollte beachten, dass ich aus einem flachen Repo mit --depth 1 geklont arbeite.

[0] https://www.kernel.org/pub/software/scm/git/docs/git-am.html [1] https://www.kernel.org/pub/software/scm/git/docs/git-config.html

Antwort

2

Aha! This SO post led me to an answer.

Zwei Dinge schief gehen:

gesetzt drei Weise wie das Standardverhalten von git am fusionieren:

git config --global am.threeWay true

Dies wurde durch die Tatsache verwirrt, dass ich (dh eine flache Kopie getan hatte. --depth 1). Der SO-Post, mit dem ich verlinkt habe, erklärt, dass die Warnung fatal: sha1 information is lacking or useless ohne genügend Historie sagt "nicht genug Informationen, um eine dreiseitige Zusammenführung zu konstruieren".

Es wäre hilfreich, es git in diesem Fall erwähnt, wenn Sie eine flache Kopie getan hatten mehr Geschichte zu holen ...

+0

Die Nachricht selbst braucht sicherlich beefed-up zu sein. Ich werde den Hinweis "git fetch --unserhalb" auch auf meine andere Antwort anwenden. – torek