Правильная поза для кода слияния
Предзнаменование
Я не буду здесь говорить о проблеме gitflow, в самом простом сценарии коллеги A и B разрабатывают совместно, предполагая, что имя ветки — feature. Они работают вместе, чтобы отправить код для этой функции.
инициализация
B Jun открыл ветку и написал строку кода B
Jun B сообщает A, что код запроса добавлен в общедоступную ветку.
Куча операций свирепы как тигры
git checkout feature
git merge -s ours func_b
Сообщите мистеру Б, что я объединил ваш код.
В это время г-н Б увидел, что мой код пропал.
😠 demo git:(feature) cat code
😠 demo git:(feature)
посмотри сноваgit log
😠 demo git:(feature) git log --oneline --decorate --graph
* 846f001 (HEAD -> feature) Merge branch 'func_b' into feature
|\\
| * 93972fb (func_b) code by b
|/
* 1c2b405 init
Нет проблем, коммиты были объединены.
Хотели бы вы воссоединиться?
😡 demo git:(feature) git merge func_b
Already up to date.
После тельца git думает, что его слили и не занимается этим. 🤬
принцип
Когда мы объединяем код, мы можем указать стратегию слияния.recursive
по умолчанию.
- resolve
- recursive
- octopus
- ours
- subtree
фокус,ours
Стратегия, то есть при слиянии, что бы ни делали другие, коммиты на моей ветке являются основными, а изменения других отбрасываются.
В связи с этим у нас может быть много товарищей по команде.
$ git merge --strategy=ours origin/master # 合并主干代码,但丢弃主干变动
$ git pull -s ours # 拉取远程代码,并丢弃队友push的代码
конец
Почему я смотрю это? Потому что я тот, кого обманули 🤬. Я не знаю, как инструмент моего коллеги git GUI настроен для таких вещей 🤬
Поскольку я слишком зол, я не могу представить другие стратегии, упомянутые выше.Подробности см. в статье большого парня.