К тому времени, когда я буду готов слить мою ветку обратно в разработку (выделено мое)
Обработка конфликтов в 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 будет рассматривать это как конфликт. Только очень мощный редактор с поддержкой языка может предположить, что конфликт связан только с форматированием, и автоматически объединить наиболее отформатированный фрагмент. Но у меня нет доказательств такого инструмента.
В конце концов, правило бойскаута не обязывает вас чистить чужой бардак. Только твой.