Git Merge - неполные, отсутствующие файлы и папки

Я пытался объединить ветку разработчика в мастер.

git checkout master    
git pull . dev

Казалось, все прошло хорошо, хотя были конфликты, я их исправил и зафиксировал. Но когда я проверил это новое объединенное рабочее дерево, в dev отсутствует множество папок и файлов.

git status  // Shows conflicts & doesn't list some files/folders.    
git commit -a 

Created commit 55ffdd1: Merge branch 'dev' into master  

git diff dev --name-status

Производит:

D       folders/lm.gif
D       folders/lmh.gif
...

Таким образом, файлы / папки, которые не отображаются в «git status». Это также не появилось в конце, когда я исправил объединенные конфликты.

Также, когда я пытаюсь слить снова, он говорит:

git merge dev    
Already up-to-date.

Тем не менее, в основной ветке явно отсутствуют файлы / папки из ветки dev. Это почему? Не следует ли добавить эту папку и все ее содержимое? «Папки» отслеживаются в ветке dev, так что, если бы я сделал это слияние, разве он не должен был быть остановлен?

Когда ранее был конфликт слияния, git остановил процесс слияния и пропустил кучу файлов / папок?

В ветке dev было довольно много изменений, мог ли я когда-нибудь напутать с git, что теперь некоторые файлы / папки не слились бы?

(Когда я впервые создал ветку dev, я не знал, что делаю, и делал сумасшедшие вещи, такие как сброс, возврат и т. Д.)

Надеюсь, что один из вас, гит-гуру из переполнения стека, знает ответ. :)

Спасибо Куанг

Ответ

Спасибо Уолтер, Да, это то, что случилось.

Проведя некоторое расследование, я обнаружил, что случилось немного сложнее. Оказалось, что.

dev разветвлен от master, у него были все файлы.Третья ветка, назовем ее «очищенной», ветвь от dev.Почистил ветку, удалил все файлы.очищенная ветка слилась (или что-то?) с мастером. В этот момент файлы были удалены с мастера. И «очищенная» ветка исчезла.на dev файлы все еще есть, и я продолжал добавлять в эту ветку, редактируя файлы довольно долго.dev слился с master, и все файлы, которые были ранее удалены, были удалены.

Надеюсь, что это помогло кому-то, кроме меня, кто довольно много узнал о том, как использовать git log, git show, git reflog, пытаясь отладить то, что произошло.

Спасибо!

Как исправить

Это то, что я сделал, чтобы объединить все содержимое в dev, которое было ранее удалено, обратно в master.

Получил все файлы / папки, которые были удалены (в dev, но не во вновь объединенном master)git diff dev --name-status | grep D > deleted_filesВывод списка всех файлов и папокgit log --name-status > file_history Используйте это, чтобы выяснить последнюю обновленную версию удаленного файла.Просмотрите список удаленных файлов один за другим, найдите самую последнюю версию в file_history и восстановите ее. Пример:git checkout 25b8a44 view.php 25b8a44 ... был коммит с последней обновленной версией view.php. Я старалсяcherry-pick и просто прямойgit checkout dev view.php но я обнаружил, явно используя коммит идентификатор, он объединяет больше своей истории. (Включая коммит, который вызывает удаление файла в первую очередь.)После того, как все удаленные файлы вернутся к быстрой проверкеgit diff dev --name-status | grep D показывает, что все файлы скопированы. Тогда, как Уолтер сказал, внести измененияgit commit --amend :)

Ответы на вопрос(1)

Ваш ответ на вопрос