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. Это почему? Не следует ли добавить эту папку и все ее содержимое? 'папки' отслеживаются в ветке разработки, так что не должно было быть остановлено, когда я выполнял слияние?

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

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

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

Надеюсь, что один из вас, git guru, здесь, при переполнении стека, знает ответ. :)

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


Ответ

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

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

  1. dev был разветвлен от master, у него были все файлы.
  2. Третья ветвь, назовем ее «очищенной», ответвление от dev.
  3. Очищенная ветка удалила все файлы.
  4. очищенная ветка слилась (что ли?) С master.На этом этапе файлы были удалены из мастера. И исчезла «очищенная» ветка.
  5. на dev, файлы все еще там, и я продолжал добавлять в эту ветку, редактировать файлы в течение некоторого времени.
  6. dev слился с master, и все файлы, которые были удалены ранее с помощью cleaned, исчезли.

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

Спасибо!

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

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

  1. Получены все файлы / папки, которые были удалены (на устройстве разработки, но не на новом объединенном главном устройстве) git diff dev --name-status | grep D> deleted_files
  2. Выводит список всех файлов и папок git log --name-status> file_history Используется для определения последней обновленной версии удаленного файла.
  3. Просмотрите список удаленных_файлов один за другим, найдите самую последнюю версию в file_history и восстановите ее. Пример: git checkout 25b8a44 view.php 25b8a44 ... был фиксацией с последней обновленной версией view.php. Я попробовал cherry-pick и просто git checkout dev view.php , но обнаружил, что явно используя идентификатор фиксации, он объединяет большую часть своей истории. (Включая фиксацию, которая в первую очередь приводит к удалению файла.)
  4. После того, как все удаленные файлы вернутся, быстрая проверка git diff dev --name-status | grep D показывает, что все файлы скопированы.Затем, как сказал Уолтер, ammend commit git commit --amend :)
37
задан Quang Van 14 August 2010 в 01:16
поделиться

1 ответ

Похоже, git считает, что недостающие файлы были удалены на главном сервере в какой-то момент между тем, где он разветвляется от dev, и головкой предварительного слияния. Это единственная причина, по которой я могу думать, почему git молча удаляет отслеживаемые файлы во время слияния.

К сожалению, я не знаю, как это исправить. Я бы, вероятно, просто повторно добавил все удаленные файлы из ветки dev вручную (или с помощью небольшого скрипта bash), а затем в git commit --amend , чтобы пересмотреть фиксацию слияния, чтобы включить их.

20
ответ дан 27 November 2019 в 05:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: