У меня есть две ветви, а именно master
и development
в репозитории GitHub. Я делаю все свои разработки в ветке разработки, как показано на рисунке.
git branch development
git add *
git commit -m "My initial commit message"
git push -u origin development
Теперь я хочу объединить все изменения на development
ветке в master
. Мой текущий подход:
git checkout master
git merge development
git push -u origin master
Пожалуйста, дайте мне знать, если процедура, которой я следую, является правильной.
git pull -u
устанавливает отслеживание в восходящем направлении для ветви (или всех ветвей, если нажать более одной). Как только он установлен, отслеживание продолжается. Нет причин использовать его постоянно.Ответы:
Как правило, мне нравится объединяться
master
сdevelopment
первым, чтобы в случае возникновения каких-либо конфликтов я мог разрешить проблему в самойdevelopment
ветке, и мои данныеmaster
остаются чистыми.Между
master
этими двумя подходами нет большой разницы, но я иногда замечал, что я не хочу объединять ветку еще, после объединения, или что еще предстоит проделать большую работу, прежде чем они могут быть объединены так что я склонен оставлятьmaster
нетронутым до финального материала.РЕДАКТИРОВАТЬ: Из комментариев
Если вы хотите отслеживать, кто и когда произвел слияние, вы можете использовать
--no-ff
флаг для слияния, чтобы сделать это. Обычно это полезно только при слиянииdevelopment
сmaster
(последний шаг), потому что вам может потребоваться слитьсяmaster
сdevelopment
(первым шагом) несколько раз в вашем рабочем процессе, и создание узла фиксации для них может быть не очень полезным.источник
--no-ff
слияние с мастером необходимо исправить это.--no-ff
для этого. :)git merge --no-ff development
просто для исправления использования @ elect.A->B->C
будет хозяином, иA->X->Y
это ваша ветка разработчика. Если вы измените часть файла, вX
которой могли возникнуть конфликты с изменениемA
, это не будет конфликтом, посколькуA
является предкомX
. Что касается потерянных изменений, обратитесь к stackoverflow.com/questions/7147680/…, чтобы восстановить любые изменения.Лично мой подход похож на ваш, с еще несколькими ветками и некоторым подавлением коммитов, когда они возвращаются к мастеру.
Один из моих коллег не любит так часто переключать ветки и остается в ветке разработки с чем-то похожим на следующее, выполненное из ветки разработки.
Первая строка гарантирует, что он имеет какие-либо восходящие коммиты, которые были сделаны мастеру с момента последнего обновления его локального репозитория.
Второй тянет эти изменения (если они есть) из мастера в разработку
Третий подталкивает ветку разработки (теперь полностью объединенную с master) до origin / master.
Я могу немного ошибиться в его базовом рабочем процессе, но в этом его основная суть.
источник
rebase
обновлениемdev
ветки вместоmerge
.Объяснение снизу для тех, кто пришел сюда без каких-либо знаний о ветвях.
Вы начинаете создавать новую ветку следующим образом:
1) Клонируйте репозиторий в вашем локальном каталоге (или создайте новый репозиторий):
2) Создать новую ветку. Он будет содержать последние файлы вашего основного филиала хранилища
3) Измените вашу текущую ветку git на new_branch
4) Заниматься кодированием, фиксирует, как обычно…
5) Когда работа в этой ветке завершится, объедините с веткой «master»:
Обновление: я настоятельно рекомендую использовать GitKraken для этого, чтобы видеть визуальное дерево изменений и лучше видеть всю логику и коммиты.
источник
release
ветку нашегоdevelop
. Затем добавили файл заметки о выпуске и зафиксировали. Затем закончил релиз, который сливается с обоимиmaster/develop
. но в моей основной ветке только что было добавлено примечание к выпуску. никакие другие файлы во время предыдущих коммитов разработки не были обновлены в нем.Было бы здорово, если бы вы могли использовать рабочий процесс Git Flow . Он может легко объединить развивающуюся ветку в мастерскую
То, что вы хотите сделать, это просто следовать инструкции git-flow, упомянутой здесь:
ШАГИ:
git flow release start <version_number>
git flow release finish <version_number>
git push
чтобы опубликовать изменения на удаленном мастере .Для получения дополнительной информации посетите страницу - http://danielkummer.github.io/git-flow-cheatsheet/
источник
источник
Да, это правильно, но похоже, что это очень простой рабочий процесс, в котором вы просто буферизуете изменения, прежде чем они будут готовы к интеграции. Вы должны изучить более продвинутые рабочие процессы, которые поддерживает git. Вам может понравиться подход ветвления темы , который позволяет вам работать над несколькими функциями параллельно, или подход градации, который немного расширяет ваш текущий рабочий процесс.
источник
Если вы используете Mac или Ubuntu, перейдите в рабочую папку ветки. В терминале
Предположим, что Харисдев является отчеством.
если есть неотслеживаемые или незафиксированные файлы, вы получите сообщение об ошибке и вам придется зафиксировать или удалить все неотслеживаемые или незафиксированные файлы.
Последняя команда для удаления ветки.
источник
Шаг 1
Создайте и переключитесь на новую ветку «dev», где ваши локальные git-файлы синхронизируются с удаленной, но ветка «dev» еще не существует.
Шаг 2
Внесите изменения в ветку «dev» (текущую, если вы выполните шаг 1), зафиксируйте и отправьте их в удаленную ветку «dev».
Шаг 3
Объедините свою ветку «dev» в «master».
источник
Вот как я обычно это делаю. Во-первых, убедитесь, что вы готовы объединить свои изменения в мастер.
git fetch
git checkout master
.git pull
git merge development
git push -u origin master
и все готово.Вы можете узнать больше о git merging в статье.
источник
1) В отделе разработки проверьте статус git с помощью следующей команды:
Там не должно быть незафиксированного кода. Если это так, отправьте ваш код в ветку Разработка:
2) В ветке разработки выполните следующие две команды:
Это подтолкнет ваш код ветки разработки в основную ветку.
источник
-f
не рекомендуетсяОсновано на @Sailesh и @DavidCulp:
Первая команда убедится, что у вас есть все вышестоящие коммиты, сделанные удаленному мастеру, с ответом Sailesh, который не произойдет.
Второй будет выполнять слияние и создавать конфликты, которые вы затем сможете разрешить.
После этого вы можете наконец оформить заказ мастера, чтобы переключиться на мастер.
Затем вы объединяете ветку разработки с локальным мастером. Флаг no-ff создаст узел фиксации в master для отслеживания всего слияния.
После этого вы можете зафиксировать и нажать свое слияние.
Эта процедура позволит убедиться, что существует коммит слияния от разработки к мастеру, который могут видеть люди, а затем, если они пойдут посмотреть ветку разработки, они увидят отдельные коммиты, которые вы сделали с этой веткой во время ее разработки.
При желании вы можете изменить свой коммит слияния перед его отправкой, если вы хотите добавить сводку того, что было сделано в ветке разработки.
РЕДАКТИРОВАТЬ: мой оригинальный ответ предложил,
git merge master
который ничего не делал, это лучше сделатьgit merge FETCH_HEAD
после получения оригинала / мастераисточник
Как только вы «оформили» ветку разработки, вы ...
источник
Если вы используете Gerrit, следующие команды работают отлично.
Вы можете сохранить с сообщением фиксации по умолчанию. Убедитесь, что идентификатор изменения сгенерирован. Вы можете использовать следующую команду, чтобы убедиться.
Затем нажмите следующую команду.
Вы можете столкнуться с сообщением об ошибке, как показано ниже.
Чтобы решить эту проблему, администратор проекта gerrit должен создать еще одну ссылку в gerrit с именем 'refs / for / refs / head / master' или 'refs / for / refs /head / *' (которая будет охватывать все ветви в будущем). Затем предоставьте разрешение «Push Merge Commit» на эту ссылку и разрешение «Отправить», если требуется отправить GCR.
Теперь попробуйте вышеупомянутую команду push, и она должна работать.
Кредиты:
https://github.com/ReviewAssistant/reviewassistant/wiki/Merging-branches-in-Gerrit
https://stackoverflow.com/a/21199818/3877642
источник
Я думаю, что самое простое решение было бы
Это также сохраняет историю всех используемых веток
источник
источник
pull
снова. Кроме того, не ясно, какую ценность этот ответ добавляет по сравнению с существующими ответами.