Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.12.2013, 00:49
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Git: Как сделать "rebase on the master" при открытом Pull Request'е?
На самом деле два вопроса:
1) Работаю я над фичей какой-нибудь. Долго работаю. В это время master меняется. Как исключить конфликты при pull request'е?

2) Что делать если pull request уже отправлен и возник конфликт?
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #2 (permalink)  
Старый 04.12.2013, 11:23
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Сообщение от danik.js
1) Работаю я над фичей какой-нибудь. Долго работаю. В это время master меняется. Как исключить конфликты при pull request'е?
Нужно следить за тем чтобы твоя ветка была всегда актуальной.

Сообщение от danik.js
Как исключить конфликты при pull request'е?
Сообщение от danik.js
2) Что делать если pull request уже отправлен и возник конфликт?
Ручное или интерактивное разрешение конфликтов
Ответить с цитированием
  #3 (permalink)  
Старый 04.12.2013, 12:00
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от monolithed
Нужно следить за тем чтобы твоя ветка была всегда актуальной.
Как это сделать таким образом, чтобы в историю коммитов не попала лишняя шняга? Если я делаю периодический merge то появляются же нежелательные коммиты.

Сообщение от monolithed
Ручное или интерактивное разрешение конфликтов
Меня просит исправить ситуацию владелец резитория, куда я отправил запрос на слияние. Что конкретно я должен сделать? Придется ли пересоздавать pull request, если необходима история без левых коммитов?
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #4 (permalink)  
Старый 04.12.2013, 13:29
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Сообщение от danik.js
Как это сделать таким образом, чтобы в историю коммитов не попала лишняя шняга? Если я делаю периодический merge то появляются же нежелательные коммиты.

Меня просит исправить ситуацию владелец резитория, куда я отправил запрос на слияние. Что конкретно я должен сделать? Придется ли пересоздавать pull request, если необходима история без левых коммитов?

Следуй общепринятому воркфлоу.

Еще раз:

1. Делаешь форк репозитория (если речь идет о гитхабе)
2. Клонируешь репозиторий:
git clone --recursive ....

3. Добавляешь алиас для удаленного репозитория:
git remote add fork ....

4. Подтягиваешь изменения из удаленного репозитория:
git pull fork master

По-умолчанию в pull'e используется флаг --no-ff и автокоммит, так что все по-честному.
Но если есть желание поиграться с ребейсом, можно заюзать --rebase

Если не хочешь делать автокоммит, то сделай все вручную:
git fetch fork master
git merge foo --no-commit --no-ff

5. Обнови все сабмодули (если нужно):
git pull --recurse-submodules && git submodule update --recursive

Или так (если нужно обновить только сабмодули):
git submodule foreach --recursive git submodule update --init

6. Создаешь свою ветку:
git checkout -b foo

7. Вносишь свои изменения
8. Обновляешь тесты.
9. Запускаешь тесты (в большинстве случаев, для JS-репозиториев нужно выполнить команду grunt)
10. Делаешь коммит:
git commit -am ...

11. Отправляешь свои изменения:
git push fork foo


PS: желательно чтобы коммит был не в мастер, чтобы владелец репозитория мог поправить историю и выкатить релиз (git tag).

Последний раз редактировалось monolithed, 04.12.2013 в 15:03.
Ответить с цитированием
  #5 (permalink)  
Старый 04.12.2013, 15:13
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Я правильно понимаю что сейчас, когда pull request уже открыт, у меня всего два варианта:
1) «git merge foo --no-commit --no-ff», поправить конфликт и закоммитить фикс.
2) Закрыть pull request, сделать rebase или чего-то там, чтобы моя feature ветка получила все последние изменения из master, но чтобы это не отразилось на истории коммитов (раньше я для этого тупо создавал новую ветку feature_new, основанную на свежем master'е, и делал cherry-pick коммитов из feature). Затем открыть новый Pull Request.

Оба варианта не очень нравятся, но как я понимаю никакого третьего магического варианта нет, так что придется выбирать из этих двух?
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #6 (permalink)  
Старый 04.12.2013, 18:09
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Сообщение от danik.js
1) «git merge foo --no-commit --no-ff», поправить конфликт и закоммитить фикс.
Только

git fetch fork foo
git merge foo --no-commit --no-ff


Еще можешь сделать:
git push --force --verbose origin master

и тогда все должно уйти одним коммитом, т.е. твои предыдущие будут объединены.

Если же ты хочешь чтобы никто не видел твоей "песочницы", то используй:

git merge --squash

Последний раз редактировалось monolithed, 04.12.2013 в 18:13.
Ответить с цитированием
  #7 (permalink)  
Старый 04.12.2013, 18:56
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

А если я сделаю git push origin feature --force, то что станется с Pull Request'ом? Он автоматически закроется (как при удалении ветки)?
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #8 (permalink)  
Старый 04.12.2013, 19:25
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Сообщение от danik.js
Он автоматически закроется (как при удалении ветки)?
C чего это?

Каждый твой push будет отражаться в истории пул-реквеста, а с форсом все уйдет как один
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать смену картинки при выборе radio RomanS Элементы интерфейса 1 11.12.2009 00:50
Accordion на Mootols, как сделать активацию при наведении курсора? gwen Библиотеки/Тулкиты/Фреймворки 1 18.08.2009 00:03
Как сделать, чтобы музыка <embed> на странице не играла только при первом посещении? Bad Request Общие вопросы Javascript 22 27.07.2009 19:44
Как сделать, чтобы 2 ссылки отображались как hover при наведении мышкой на любую? Ava Элементы интерфейса 5 19.05.2009 23:24
Как сделать ссылку картинку, которая изменяется при наводе курсора на неё? Кирилл Общие вопросы Javascript 2 10.03.2009 15:14