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

StackOverflow https://stackoverflow.com/questions/3472804

  •  28-09-2019
  •  | 
  •  

Вопрос

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

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, я не знал, что я делал, и сделал сумасшедшие вещи, такие как сброс, возвращаются и т. Д.)

Надеясь, один из вас Git Git Guuru здесь на стеке Переполнение знает ответ. :)

Спасибо, quang.


Отвечать

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

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

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

Надеюсь, что это помогло кому-то, кроме меня, кто узнал довольно много о том, как использовать GIT Log, Git Show, Git Refrold Perruit, пытаясь отлаживать то, что произошло.

Спасибо!

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

Так что это то, что я сделал, чтобы объединить все содержимое в разработке, который ранее был удален на мастер.

  1. Получил все файлы / папки, которые были удалены (на dev, но не на недавно объединенном мастере) git diff dev --name-status | grep D > deleted_files
  2. Выходной список всех файлов и папок git log --name-status > file_history Собираюсь использовать это, чтобы выяснить последнюю обновленную версию удаленного файла.
  3. Пройдите список deleded_files один за другим, найдите самую обновленную версию в 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 показывает, что все файлы копируются. Тогда как Уолтер сказал, что боеприпасы git commit --amend :)
Это было полезно?

Решение

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top