Я пытался объединить ветку разработчика с основной.
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, здесь, при переполнении стека, знает ответ. :)
Спасибо, Куанг
Спасибо, Уолтер, да, вот что случилось.
Проведя небольшое расследование, я обнаружил, что то, что произошло, было немного сложным. Оказалось, что.
Надеюсь, это помогло кому-то помимо меня, кто достаточно много узнал о том, как использовать git log, git show, git reflog, пытаясь отладить то, что произошло.
Спасибо!
Вот что я сделал, чтобы объединить все содержимое в dev, которое было ранее удалено, обратно на master.
git diff dev --name-status | grep D> deleted_files
git log --name-status> file_history
Используется для определения последней обновленной версии удаленного файла. git checkout 25b8a44 view.php
25b8a44 ... был фиксацией с последней обновленной версией view.php. Я попробовал cherry-pick
и просто git checkout dev view.php
, но обнаружил, что явно используя идентификатор фиксации, он объединяет большую часть своей истории. (Включая фиксацию, которая в первую очередь приводит к удалению файла.) git diff dev --name-status | grep D
показывает, что все файлы скопированы.Затем, как сказал Уолтер, ammend commit git commit --amend
:) Похоже, git считает, что недостающие файлы были удалены на главном сервере в какой-то момент между тем, где он разветвляется от dev, и головкой предварительного слияния. Это единственная причина, по которой я могу думать, почему git молча удаляет отслеживаемые файлы во время слияния.
К сожалению, я не знаю, как это исправить. Я бы, вероятно, просто повторно добавил все удаленные файлы из ветки dev вручную (или с помощью небольшого скрипта bash), а затем в git commit --amend
, чтобы пересмотреть фиксацию слияния, чтобы включить их.