Похоже, лучшая стратегия (на будущее) - это работать над проектом. Если Dev1 и Dev2 работают над принципиально разными вещами, у каждого из них должна быть своя ветвь кода.
Имейте в виду, что все в TFS хранится в виде дельт и указателей, поэтому при этом вы не увеличиваете размер своего хранилища. До тех пор, пока файл не изменится, новая ветвь будет только указателем на исходный файл, затем, когда файл будет зарегистрирован, сохраняется только дельта.
В вашей текущей ситуации вы делаете то, что называется "вишневым" слиянием. Это не забавная вещь (как вы выяснили), и она подвержена ошибкам PEBKAC . По этой причине слияния вишневого дерева настоятельно не рекомендуется. Тем не менее, если вам необходимо выполнить слияние по принципу «вишня», вы можете использовать некоторый контроль, объединяя изменения (вместо последних).
Чтобы сделать это, определите наборы изменений, которые Dev1 зарегистрировал в вашей ветви Dev, затем объедините эти наборы изменений с вашей основной веткой. Вам нужно будет сделать это по порядку от самого старого до самого нового, чтобы быть уверенным, что вы получите все файлы. Лучше всего, если вы собираетесь это сделать, - либо написать утилиту для этого, либо перейти к командной строке TF.EXE, чтобы вы могли объединить ваши слияния.
Не забудьте выполнить слияния в чистом рабочем пространстве, и вы можете собрать все слияния перед регистрацией.
Ключевой урок, который вы изучаете здесь, заключается в том, что ваша стратегия / методология ветвления является одной из самых важных вещей в SCM (в целом). Мы перешли с StarTeam на TFS чуть более полутора лет назад, и когда мы это сделали, мы потратили около 4 месяцев на пересмотр нашего подхода к ветвлению, пока не пришли к тому, что соответствовало бы нашей среде и нашим процессам разработки.