Сохранение изменений при неполном слиянии
Я работал над веткой функций с другим разработчиком, который находится удаленно. Мы завершили нашу работу над этой веткой и теперь хотим объединить ее с мастером. Мы столкнулись с довольно многими конфликтами. Есть определенные файлы, над которыми я работал, и я знаю, как бороться с этими конфликтами, и есть определенные файлы, над которыми он работал, где он будет знать, как исправить эти конфликты.
У меня вопрос: есть ли способ, с помощью которого я могу начать слияние, исправить конфликты, на которые я способен, а затем удаленно спрятать ветвь функций, еще находясь в состоянии слияния? В какой момент он может вступить во владение и закончить слияние? Обычно мы могли бы просто делиться экраном, но он находится в совершенно другом часовом поясе.
Я использую SourceTree и только немного знаком с использованием git bash.
2 ответа
Я думаю, что вы могли бы использовать git rerere
чтобы записать свои решения конфликтов, передайте их своему коллеге, который может применить их, а затем разрешить оставшиеся конфликты.
Включить git rerere
сначала нужно сделать git config rerere.enabled true
, С тех пор все ваши решения конфликтов записываются в git и применяются, если тот же конфликт возникает снова. Вы можете прочитать больше об этой функциональности здесь.
После включения rerere вы можете начать выполнять слияние и решать конфликты, на которые вы способны. Когда вы закончите, позвоните git rerere
что даст вам некоторый вывод, как это:
Recorded resolution for 'your-conflict.txt'.
Recorded preimage for 'co-worker-conflict.txt'
Где your-threat.txt - это файл, в котором вы решили конфликты, а co-worker-конфликт.txt - это файл, который должен решить ваш коллега.
Решения о конфликтах хранятся в папке.git / rr-cache /. Вы можете отправить содержимое этой папки своему коллеге, и он поместит их в ту же папку.
Когда он впоследствии начнет то же самое слияние, которое вы делали раньше, он получит вывод примерно так:
Resolved 'your-conflict.txt' using previous resolution.
Recorded preimage for 'co-worker-conflict.txt'
Это означает, что ваши решения для файла your-конфликта.txt были применены, а решения для файла co-worker-конфликта.txt по-прежнему отсутствуют. Файл your-конфликта.txt будет в "неотключенном" состоянии, однако все конфликты разрешены и могут быть просто git add
редактор
Поскольку я не уверен на 100% во внутренних файлах папки rr-cache, я бы опустошил ее перед записью решений, а также перед применением ваших файлов в хранилище ваших коллег. Если вы хотите делать это часто, возможно, стоит поделиться каким-то образом папкой rr-cache, например, как описано в этом ответе.
Ответ на этот вопрос действительно зависит от того, как вы используете git.
Предполагая, что файлы не фиксируются в ветви функций, и вы можете хранить их там, я бы использовал:
git stash --patch
Это позволит вам в интерактивном режиме хранить файлы с конфликтами, которые необходимы вашему коллеге для объединения, оставляя все файлы, которые вы знаете, как разрешить. Затем вы можете выполнить слияние на том, что вы знаете, как решить. Когда вы будете готовы объединить сохраненные изменения, я буду использовать "git stash apply", поэтому сохраненные вами версии останутся в списке.
Единственное, что меня беспокоит, так это то, что вы оба работаете в "грязном" каталоге и не подтвердили, что можете сохранить изменения. Если вы оба находитесь в стабильном состоянии в своей ветви функций, я бы посоветовал вам зафиксировать свои изменения. Затем, когда вы объединяетесь с мастером, он создает конфликтные файлы, которые ваш коллега может позже разрешить.