Слияние с филиалом
У меня две ветки, а именно 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
Пожалуйста, дайте мне знать, правильно ли соблюдена процедура, которую я выполняю.
Ответы
Ответ 1
Мне обычно нравится сначала объединить master
в development
, так что, если есть какие-либо конфликты, я могу разрешить в самой ветке development
, а мой master
остается чистым.
(on branch development)$ git merge master
(resolve any merge conflicts if there are any)
git checkout master
git merge development (there won't be any conflicts now)
В двух подходах нет большой разницы, но иногда я заметил, что я не хочу объединять ветвь в master
, но после их слияния или что еще есть работа прежде чем они могут быть объединены, поэтому я предпочитаю оставить master
нетронутым до окончательного материала.
ИЗМЕНИТЬ: Из комментариев
Если вы хотите отслеживать, кто сделал слияние и когда, вы можете использовать флаг --no-ff
при слиянии для этого. Это обычно полезно только при объединении development
в master
(последний шаг), поскольку вам может потребоваться слияние master
в development
(первый шаг) несколько раз в вашем рабочем процессе и создание фиксации node для них это может быть не очень полезно.
git merge --no-ff development
Ответ 2
Лично мой подход такой же, как и у вас, с несколькими ответвлениями и некоторым подавлением коммитов, когда они возвращаются к мастеру.
Один из моих коллег не любит, когда приходится так часто переключать ветки, и остается в ветке разработки, выполняя что-то похожее на следующее, выполняемое из ветки разработки.
git fetch origin master
git merge master
git push origin development:master
Первая строка проверяет наличие у него каких-либо восходящих коммитов, которые были сделаны мастером с момента последнего обновления его локального репозитория.
Второй вытягивает эти изменения (если они есть) из мастера в разработку
Третий переводит ветку разработки (теперь полностью объединенную с master) до origin/master.
Я могу немного ошибиться в его базовом рабочем процессе, но в этом его основная суть.
Ответ 3
Объяснение снизу для тех, кто пришел сюда без каких-либо знаний о ветвях.
Основная логика разработки основной ветки такова: вы работаете только с другими ветками и используете master только для объединения других ветвей.
Вы начинаете создавать новую ветку следующим образом:
1) Клонировать нужное хранилище в корень вашего веб-сайта:
$ cd /var/www
$ git clone [email protected]:user_name/repository_name.git
2) Создать новую ветку. Он будет содержать последние файлы вашего основного ветки хранилища
$ git branch new_branch
3) Измените ветку git на new_branch
$ git checkout new_branch
4) Заниматься кодированием, коммитами, как обычно…
$ git add .
$ git commit -m "Initial commit"
$ git push (pushes commits only to "new_branch")
5) Когда работа в этой ветки будет завершена, объедините ее с "основной" веткой:
$ git merge master
$ git checkout master (goes to master branch)
$ git merge development (merges files in localhost. Master shouldnt have any commits ahead, otherwise there will be a need for pull and merging code by hands!)
$ git push (pushes all "new_branch" commits to both branches - "master" and "new_branch")
Обновление: я настоятельно рекомендую использовать GitKraken для этого, чтобы видеть визуальное дерево изменений и лучше видеть всю логику и коммиты.
Ответ 4
Было бы здорово, если бы вы могли использовать рабочий процесс Git Flow. Он может легко объединить развивающуюся ветку в мастерскую.
То, что вы хотите сделать, это просто следовать инструкции git-flow, упомянутой здесь:
ШАГИ:
- настроить проект git-flow
- создавать ветки и объединять все для развития
- запустите команду
git flow release start <version_number>
- затем предоставьте содержательное сообщение для релиза
- выполните команду
git flow release finish <version_number>
- он объединит все в master и изменит ветку на master.
- выполните команду
git push
чтобы опубликовать изменения на удаленном мастере.
Для получения дополнительной информации посетите страницу - http://danielkummer.github.io/git-flow-cheatsheet/
Ответ 5
1. //pull the latest changes of current development branch if any
git pull (current development branch)
2. //switch to master branch
git checkout master
3. //pull all the changes if any
git pull
4. //Now merge development into master
git merge development
5. //push the master branch
git push origin master
Ответ 6
Да, это правильно, но это похоже на очень простой рабочий процесс, где вы просто буферизуете изменения, прежде чем они будут готовы к интеграции. Вы должны изучить более сложные рабочие процессы, которые поддерживает git. Вам может понравиться раздел ветки, который позволяет вам работать с несколькими функциями параллельно или градуировочный подход, который немного расширяет ваш текущий процесс.
Ответ 7
Если вы находитесь на Mac или Ubuntu, перейдите в рабочую папку ветки. В терминале
предположим, что harisdev - это branchname.
git checkout master
если есть незатребованные или незафиксированные файлы, вы получите сообщение об ошибке, и вы должны зафиксировать или удалить все неиспользуемые или незафиксированные файлы.
git merge harisdev
git push origin master
Последняя команда для удаления ветки.
$ git branch -d harisdev
Ответ 8
Шаг 1
Создайте и переключитесь на новую ветку "dev" , где локальные файлы git синхронизированы с удаленным, но ветвь "dev" еще не существует.
git branch dev # create
git checkout dev # switch
# No need to git add or git commit, the current
# branch files will be cloned to the new branch by-default.
git push --set-upstream origin dev # push the "dev" branch to the remote.
Шаг 2
Внесите свои изменения в ветку "dev" (ваш текущий, если вы выполните шаг 1), зафиксируйте и надавите на удаленный ветвь "dev" .
git add .
git commit -S -m "my first commit to the dev branch" # remove the -S if you're not "secure", secure = when you already setup crypto private and public keys (i.e "verified" green sign in github)
git push -u origin dev # push the changes to the remote, -u origin dev is optional but good to use.
Шаг 3
Объедините ветвь "dev" в "master".
git checkout dev # switch to "dev" branch if you're not already.
git merge master # optionally, this command is being used to resolve any conflicts if you pushed any changes to your "master" but "dev" doesn't have that commit.
git checkout master # switch to "master", which is the branch you want to be merged.
git merge --no-ff dev # merge the "dev" branch into the "master" one.
Ответ 9
Вот как я обычно это делаю. Во-первых, убедитесь, что вы готовы объединить свои изменения в мастер.
- Проверьте, соответствует ли разработка последним изменениям с вашего удаленного сервера с помощью
git fetch
- Как только выборка будет завершена,
git checkout master
. - Убедитесь, что главная ветвь имеет последние обновления, выполнив
git pull
- После завершения подготовки вы можете начать слияние с помощью
git merge development
- Нажмите на изменения с помощью
git push -u origin master
и все готово.
Вы можете узнать больше о git merging в статье.
Ответ 10
1) В отделе разработки проверьте статус git с помощью следующей команды:
git status
Там не должно быть незафиксированного кода. Если это так, отправьте ваш код в ветку Разработка:
git add *
git commit -m "My initial commit message"
git push origin Development
2) В ветке Разработка запустите следующие две команды:
git branch -f master HEAD
git push -f origin master
Это подтолкнет ваш код ветки разработки в основную ветку.
Ответ 11
Основано на @Sailesh и @DavidCulp:
(on branch development)
$ git fetch origin master
$ git merge FETCH_HEAD
(resolve any merge conflicts if there are any)
$ git checkout master
$ git merge --no-ff development (there won't be any conflicts now)
Первая команда убедится, что у вас есть все вышестоящие коммиты, сделанные удаленному мастеру, с ответом Sailesh, который не произойдет.
Второй будет выполнять слияние и создавать конфликты, которые вы затем сможете разрешить.
После этого вы можете наконец оформить заказ мастера, чтобы переключиться на мастер.
Затем вы объединяете ветку разработки с локальным мастером. Флаг no-ff создаст узел фиксации в master для отслеживания всего слияния.
После этого вы можете зафиксировать и нажать свое слияние.
Эта процедура гарантирует, что люди увидят коммит слияния от разработки к мастеру, и если они пойдут посмотреть ветку разработки, то увидят отдельные коммиты, которые вы сделали в этой ветке во время ее разработки.
При желании вы можете изменить свой коммит слияния перед его отправкой, если хотите добавить сводку того, что было сделано в ветке разработки.
РЕДАКТИРОВАТЬ: мой оригинальный ответ предложил git merge master
который ничего не делал, лучше сделать git merge FETCH_HEAD
после выборки origin/master
Ответ 12
Как только вы "оформили" ветку разработки, вы...
git add .
git commit -m "first commit"
git push origin dev
git merge master
git checkout master
git merge dev
git push origin master
Ответ 13
Я думаю, что самое простое решение было бы
git checkout master
git remote update
git merge origin/Develop -X theirs
git commit -m commit -m "New release"
git push --recurse-submodules=check --progress "origin" refs/heads/Master
Это также сохраняет историю всех используемых веток
Ответ 14
Если вы используете Gerrit, следующие команды работают отлично.
git checkout master
git merge --no-ff development
Вы можете сохранить с сообщением фиксации по умолчанию. Убедитесь, что идентификатор изменения сгенерирован. Вы можете использовать следующую команду, чтобы убедиться.
git commit --amend
Затем нажмите следующую команду.
git push origin HEAD:refs/for/refs/heads/master
Вы можете столкнуться с сообщением об ошибке, как показано ниже.
! [remote rejected] HEAD -> refs/for/refs/heads/master (you are not allowed to upload merges)
Чтобы решить эту проблему, администратор проекта 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
fooobar.com/questions/1182436/...
Ответ 15
1. //push the latest changes of current development branch if any
git push (current development branch)
2. //switch to master branch
git checkout master
3. //pull all the changes if any from (current development branch)
git pull origin (current development branch)
4. //Now merge development into master
git merge development
5. //push the master branch
git push origin master
Error
To https://github.com/rajputankit22/todos-posts.git
! [rejected] master -> master (fetch first)
error: failed to push some refs to 'https://github.com/rajputankit22/todos-posts.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
Then Use
5. //push the master branch forcefully
git push -f origin master