К тому времени, когда я буду готов слить мою ветку обратно в разработку (выделено мое)
Обработка конфликтов в git mergeчасто проще, чем в git rebase. В Git merge вы можете увидеть весь список файлов, которые были изменены сразу. Независимо от того, сколько коммитов было сделано другими коллегами, вам придется объединиться один раз . С технологией перебазирования вы можете снова и снова сталкиваться с одними и теми же конфликтами, и вам придется просматривать их вручную. В итоге вы можете исправить 13-й коммит и почувствовать, что не видите света из туннеля .
По своему опыту, когда я пытался наивно разрешать повторяющиеся конфликты перебазирования, я терял чьи-то модификации или приложение, которое даже не компилировалось. Часто я и коллеги проделали большую работу, но были настолько ошеломлены сложностью повторения конфликтов, что нам пришлось прервать и потерять нашу предыдущую работу после нескольких повторных коммитов.
Я собираюсь предложить вам несколько методов, но они могут только помочь облегчить слияние, чем автоматизировать задачу.
- Ресурс / языковые файлы . Если у вас есть аддитивные изменения в файле ресурсов, убедитесь, что вы всегда перемещаете их в конец файла, чтобы вы могли легко вызывать ваши изменения в сравнении с изменениями других . Вы можете скопировать и вставить свои изменения внизу или просто удалить маркеры конфликта.
- Делать. Не. АБСОЛЮТНО. RE-формат . Ни вы, ни ваши коллеги-разработчики не должны выполнять «масштабное переформатирование кода» во время повседневной работы. Переформатирование кода добавляет чрезмерное количество ложных срабатываний в управление конфликтами. Переформатирование кода может быть сделано
- Поэтапно, например, каждым разработчиком в каждом коммите, как только они используют автоматизированный инструмент (например, Eclipse имеет возможность переформатировать при сохранении, в Vanilla Visual Studio его нет). Абсолютно каждый разработчик должен использовать одни и те же стандарты форматирования кода, закодированные в файл формата, который используется вашей IDE. Чтобы дать вам представление, если это 4 пробела или 2 табуляции, это не имеет значения, но действительно важно, если все используют одно и то же.
- Непосредственно перед выпуском, лидером команды. Если фиксация «переформатирования кода» происходит, когда люди не работают над ветвями, то есть до того, как они разветвляются, все будет проще
- Просмотрите работу по разделению между коллегами. Это та часть, куда приходит большинство инженеров. Как указывают другие ответы, это запах дизайна, если несколько разработчиков, выполняющих разные задачи, должны касаться одних и тех же ресурсов. Возможно, вам придется обсудить с руководителем вашей команды, какую часть должен изменять каждый параллельный разработчик.
Я также видел некоторые вредные привычки в рабочих процессах Git в моих командах. Часто люди подчиняются своим ветвям. Я лично был свидетелем того, как разработчик добавил от 10 до 20 коммитов с пометкой «исправление», каждый из которых фиксировал одну или две строки. Наша политика заключается в том, что коммиты помечаются билетами JIRA, чтобы дать вам идею.
@JacobRobbins предлагает сделать git rebaseежедневное задание. Я хотел бы продвинуть его подход вперед.
Во-первых, используйте rebase один раз, чтобы уменьшить количество коммитов до нескольких. И перебазируйте только на оригинальную ветку разработки, которая является коммитом, с которого вы разветвились. Когда я говорю «горстка», я имею в виду 3 или 4 (например, весь интерфейс, весь сервер, все исправления базы данных) или любую разумную цифру. После того, как вы их консолидируете, используйте fetchи работайте над ребазой над веткой upstream. Это не спасет вас от конфликта, если ваша команда не рассмотрит их собственный подход, но сделает вашу жизнь менее болезненной.
Если у вас есть дополнительные вопросы по конкретным задачам, не стесняйтесь искать и задавать вопросы в Stackoverflow.
[Править] о правилах без переформатирования и бойскаутов. Я немного перефразировал RE-формат, чтобы подчеркнуть, что я имею в виду задачу форматирования с нуля всего исходного файла, включая код, который вы не затронули. В противоположность тому, что вы всегда форматируете свой собственный код, который очень бойцовский, многие разработчики, включая меня, используются для переформатирования всего файла с помощью возможностей IDE. Когда к файлу обращаются другие, даже если затронутые строки не изменяются в их содержимом и семантике, Git будет рассматривать это как конфликт. Только очень мощный редактор с поддержкой языка может предположить, что конфликт связан только с форматированием, и автоматически объединить наиболее отформатированный фрагмент. Но у меня нет доказательств такого инструмента.
В конце концов, правило бойскаута не обязывает вас чистить чужой бардак. Только твой.