Как не потерять код при слиянии двух веток? - PullRequest
0 голосов
/ 08 апреля 2019

Ситуация такова, что у нашей команды есть ветвь dev, от которой мы отделены, чтобы работать над различными проблемами. Иногда это требует, чтобы мы работали над одним файлом, но в разных ветвях.

user1(file1.txt)   X
                  / \
dev(file1.txt) - A - B - C
                  \       \  
user2(file1.txt)   A' ---- B'

Проблема в том, что когда мы объединяем user2 (B ') в dev (C), он имеет тенденцию отменять любые изменения, сделанные в коммитах BC, то же самое происходит, если мы сначала пытаемся объединить C с B', а затем объединить user2 обратно в dev.

Например, если в dev (B) я добавил строку «это коммит B», то при слиянии между user2 (B ') и dev (C) эта строка исчезнет. То же самое происходит, когда мы пытаемся сохранить изменения перед коммитом B 'и слить с dev (C), а затем повторно применить изменения.

Есть ли способ вручную контролировать, какие изменения вносятся во время объединения, чтобы мы могли объединять только те изменения, которые, как мы знаем, мы сделали?

По сути, в настоящее время мы вынуждены делать это, когда сталкиваемся с этой проблемой, мы копируем изменения в одну сторону, создаем новую ветку из dev, помещаем изменения обратно и затем объединяем эти изменения обратно в dev, но я знаю, есть более разумный способ делать вещи.

Graph Log
* | | | | | | |   971fa0e Merge branch 'p' into 'dev'
|\ \ \ \ \ \ \ \
| |_|_|_|_|_|_|/
|/| | | | | | |
| * | | | | | |   dcb98ea Merge branch 'dev' into 'p'
| |\ \ \ \ \ \ \
| | | |_|_|_|_|/
| | |/| | | | |
| * | | | | | | d6fd278
| * | | | | | | 9d47bd7
| * | | | | | | 11560e7
| | |_|/ / / /
| |/| | | | |
* | | | | | | ace54f1

1 Ответ

0 голосов
/ 08 апреля 2019

Видя, как выглядит ваш график (и что после этого, похоже, многое еще впереди), я бы сказал, что на данный момент лучше всего будет воссоздать новую ветку p с dev и git cherry-pick d6fd278 9d47bd7 11560e7 довернуть ваши коммиты в ветку (плюс любые другие коммиты, которые вам нужны в p).В итоге вы получите следующее:

* new commit for 11560e7 <p>
* new commit for 9d47bd7
* new commit for d6fd278
* <dev>

Затем, когда ветка будет готова перейти в dev, вы объедините ее:

git checkout dev
git merge --no-ff p

И, наконец, удалите ветку p.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...