2014-01-21 21 views
5

Vor einigen Wochen erstelle ich einen Feature-Zweig, ich entwickle in. Es gibt mehrere Commits und einige neue Dateien. Ich kann vom Meisterzweig zu meinem Entwicklungszweig und umgekehrt wechseln und alles ist in Ordnung.fehlende Dateien nach Git Merge

Heute habe ich versucht, meinen Zweig zurück zum Master-Zweig zu verschmelzen. Deshalb änderte ich zu Master und rief

an, was zu mehreren Zusammenführungskonflikten führte. Ich löste diese Konflikte mit

Aber jetzt, realisierte ich, gibt es einige Dateien, die innerhalb des Ergebnisses fehlen, das ich begehen muss. So gibt es zwei Fragen: Sollte nicht alle zusammengeführten Elemente auf meiner Festplatte nach dem Zusammenführen sein? Wie kann ich fortfahren, um das echte Merge-Ergebnis zu erhalten (Master + mein Feature-Zweig)?

+0

, wenn Datei in mydevbranch ist in Master fehlt, das heißt man sie wahrscheinlich in einem der Zweig entfernt und wählte die falsche zu halten – Asenar

+0

die Datei in devbranch neu –

+0

ist 'git log --pretty = oneline - -stat --all path/to/missing/files' gibt Ihnen interessante Ausgabe? Sind Sie sicher, dass Sie "git add && git commit" haben? Wenn du an der Dev-Zweigstelle auscheckst, machen die Dateien da nochmal? – Asenar

Antwort

0

Für Ihre erste Frage: Sollte nicht alle zusammengelegten Elemente auf meiner Festplatte nach dem Zusammenführen sein?

Ich mache ein Experiment auf meiner eigenen Umgebung. Es hat den gleichen Effekt wie du. Meine Schlussfolgerung ist also, dass die in Ihrem Master-Zweig gelöschte Datei nicht in Ihren Master-Zweig zurückkommt, wenn Sie den Entwicklungszweig mit derselben Datei zusammenführen.

Ich denke, das macht Sinn. Angenommen, Sie haben viele unerwünschte Dateien im Hauptzweig gelöscht und diese Entfernungen übernommen. Dann fusionieren Sie den Zweig Entwickeln, der all diese unerwünschten Dateien enthält. Wenn all diese unerwünschten Dateien wieder in den Master-Zweig "hinzugefügt" werden, können Sie sich darüber ärgern, dass dies passiert, weil Sie Zeit brauchen, um sie wieder zu löschen.

1

Überprüfen Sie, ob nichts in Stash ist

 
git stash pop 

Für neue Dateien, stellen Sie sicher, dass Sie sie hinzufügen zuerst (git status sollte sie auflisten)

 
git add 

Die besten docs über Git überhaupt einschließlich Filialen: http://git-scm.com/book/en/Git-Branching-Basic-Branching-and-Merging

+0

gibt es nichts im Versteck. Die Datei wird für einige Wochen innerhalb des Dev-Zweigs bereitgestellt und ich lese bereits den ganzen Abschnitt des Buches. aber ohne Erfolg. Ich wechseln zum Master, rufen Sie den Befehl zum Zusammenführen und es fehlen einige Dateien. Ich werde mich nicht verpflichten, solange nicht alle Dateien vorhanden sind (das scheint mir richtig zu sein). –

0

Es ist nicht möglich, Dateien auf diese Weise zu verlieren.

können Sie diese Alternative versuchen:

git checkout mydevbranch 
# following command to find the previous state easier if you are not familiar with reflog 
git branch tmp-checkpoint 
git rebase master 

Dann Konflikte lösen. Wenn die Dateien immer noch fehlen, können Sie git bisect (siehe Manpage) verwenden, um den Punkt zu finden, wo sie verschwinden

3

Nach einigen Untersuchungen fand ich Folgendes. Die Datei wurde von mir auf Master hinzugefügt, bevor ich den Zweig erstellt habe (deshalb war es in meinem Dev-Zweig). Aber jetzt die verrückte Sache: Die Datei wurde im Master anschließend von einem Kollegen gelöscht, jedoch ohne Statusinformationen. Das Statusprotokoll zeigt nur die Erstellung der Datei an. Die Zusammenführung war also korrekt, aber aufgrund der fehlenden Statusinformationen war es für mich nicht nachvollziehbar.