Подтвердить что ты не робот

Почему Git создать компиляцию слияния без изменений файла?

Я совместно работаю над проектом с кем-то, поэтому мы решили использовать git. К сожалению, мы часто кодируем в местах без Интернета, поэтому в итоге получим что-то вроде этого:

origin/master: A---B---C
                        \
mylocalmaster:           D---E---F
                        \
hismaster:               G---H---I

Теперь, скажем, он толкает свои коммиты и получает следующее:

origin/master: A---B---C---G---H---I
                        \
master (local):          D---E---F

Все, что я хочу сделать, это нажать мои коммиты, чтобы получить это как в моем локальном репо, так и в онлайн-режиме:

A---B---C---D---E---F---G---H---I

Кажется, что работает, когда я делаю git push, но проблема возникает, когда я делаю git fetch, а затем git merge. Все, что я пытаюсь сделать, это получить свои коммиты в моем локальном репо, но в итоге я получаю сообщение об объединении с сообщением типа Merge remote-tracking branch 'origin/master'.

Я не хочу иметь эту бессмысленную фиксацию, поскольку в наших коммитах нет противоречивого кода. Мы работаем над совершенно разными файлами, поэтому нет причин для этого. Как я могу предотвратить git от создания этого коммита слияния?

4b9b3361

Ответ 1

Вы можете опустить создание коммитов слияния, используя rebase вместо merge.

Как сказал @Dougal, если вы выполните git fetch, вы можете выполнить git rebase после этого, чтобы изменить базу своих изменений на выбранный HEAD.

Обычно вы создаете эти нежелательные комманды, вытаскивая их из удаленного репозитория. В этом случае вы можете добавить опцию --rebase:

git pull --rebase

или добавьте правильную опцию в файл конфигурации Git (локально):

git config branch.<branch-name-here>.rebase true

или для всех новых репозиториев и ветвей:

git config branch.autosetuprebase always --global

Тем не менее, rebasing создает более чистую, более линейную историю , хорошо создавать транзакции слияния, где в обеих ветвях есть значительные изменения. (используйте git merge).

Ответ 2

Используйте git rebase (после git fetch), чтобы ваши коммиты применялись против него, а не против предыдущего мастера. То есть перейти к ABCGHIDEF в вашем примере. (Вы не можете сделать ABCDEFGHI без необходимости делать push -f, потому что ABCGHI уже находится в origin/master, и вам придется переопределить это.)