Запросы на вытягивание
Узнайте, как использовать запросы на вытягивание для предложения изменений в проект, получения предложенных изменений и устранения проблем в запросах на вытягивание, таких как конфликты слияния.
Обзор
Начало работы
-
Изменение сообщения о фиксации
Если сообщение о фиксации содержит нечеткую, неправильную или конфиденциальную информацию, вы можете изменить ее локально и отправить новую фиксацию с новым сообщением в GitHub. Вы также можете изменить сообщение о фиксации, чтобы добавить недостающие сведения.
-
Разрешение конфликта слияния с помощью командной строки
Устраните конфликты слияния с помощью командной строки и текстового редактора.
-
Создание и удаление ветвей в репозитории
Вы можете создавать или удалять ветви непосредственно в GitHub.
-
Создание запроса на включение изменений
Создайте запрос на вытягивание, чтобы предложить изменения в репозитории и совместно работать над ними. Эти изменения предлагаются в ветви, что гарантирует, что ветвь по умолчанию содержит только завершенную и утвержденную работу.
Популярное
-
Сведения о проверках запроса на вытягивание
-
Разрешение конфликта слияния в GitHub
-
Синхронизация вилки
-
Слияние запроса на вытягивание
Новое
Просмотреть все
-
Manage branch protection rules with a new permissionFebruary 08
-
Pull request merge queue (public beta)February 08
-
API for reverting a pull requestJanuary 27
Руководства
-
Утверждение запроса на вытягивание с необходимыми проверками
Если для репозитория требуются проверки, запросы на вытягивание должны содержать определенное количество утверждений от пользователей с разрешениями на запись или разрешениями администратора для репозитория, прежде чем их можно будет объединить.
-
Отмена запроса на вытягивание
Вы можете отменить изменения запроса на вытягивание после слияния с вышестоящей ветвью.
-
Почему мои фиксации связаны с неправильным пользователем?
GitHub использует адрес электронной почты в заголовке фиксации, чтобы связать фиксацию с пользователем GitHub. Если фиксации связаны с другим пользователем или вообще не связаны с пользователем, может потребоваться изменить параметры локальной конфигурации Git, добавить адрес электронной почты в параметры электронной почты учетной записи или выполнить оба действия.
All Запросы на вытягивание docs
Фиксация изменений в проекте
-
Создание и изменение фиксаций • 4 articles
-
Просмотр и сравнение фиксаций • 2 articles
-
Устранение неполадок фиксаций • 2 articles
Совместная работа с запросами на вытягивание
-
Начало работы • 1 articles
-
Работа с вилками • 5 articles
-
Совместная работа с репозиториями с функциями оценки качества кода • 1 articles
-
Предложение изменений в работе с помощью запросов на включение изменений • 12 articles
-
Разрешение конфликтов слияния • 3 articles
-
Проверка изменений в запросах на включение изменений • 11 articles
-
Включение изменений из запроса на включение изменений • 6 articles
Я открыл запрос на перенос проекта. Сопровождающий решил принять его, но посоветовал мне изменить некоторое содержимое.
Как мне это сделать? Должен ли я оставить хеш фиксации неизменным, как я могу это сделать?
5 ответов
Лучший ответ
Просто отправьте больше коммитов в ветку, для которой предназначен запрос. Запрос на вытягивание примет это тогда.
Примере:
Если вы хотите, чтобы b слился с мастером
- Вы нажимаете c1, c2, c3 на b
- затем вы делаете новый запрос на b
- он проверяется, и вам нужно больше коммитов
- Вы нажимаете c11, c21, c31 на b
- Запрос на вытягивание теперь показывает все 6 шести коммитов.
202
Ivan Aracki
25 Сен 2020 в 12:18
Примените свои изменения поверх существующей ветки, в которой создается PR. Например, если имя вашей ветви — newFeature
и у вас есть PR для объединения newFeature
с веткой develop
. Примените предложенные изменения в ветке newFeature с любым количеством коммитов. Как только вы закончите с исправлением предлагаемых изменений обзора. Разрешите рецензенту пересмотреть его. После утверждения вы сможете объединить свой PR.
Вы можете использовать SourceTree или какой-нибудь инструмент с графическим интерфейсом, если вам нужна общая помощь с git.
Вы также можете использовать github api.
Пример с curl
curl --user "your_github_username"
--request PATCH
--data '{"title":"newtitle","body":"newbody",...}'
https://api.github.com/repos/:owner/:repo/pulls/:number
Вы можете найти подробный список данных в документации для разработчиков github
Пример: изменить имя моего запроса на вытягивание
curl --user "jeremyclement"
--request PATCH
--data '{"title":"allows the control of files and folders permissions."}'
https://api.github.com/repos/Gregwar/Cache/pulls/9
1
Community
20 Июн 2020 в 09:12
Если вы продолжите вносить изменения и продолжаете нажимать на ту же ветку, уточненные коммиты будут добавлены в тот же запрос на вытягивание (если ваш запрос на вытягивание не был объединен). Это могло сильно загромождать историю.
Альтернативное решение и техника, которые я использую, следующие:
-
Создайте новую ветку (исправления) из репозитория (восходящий поток) и ветку (разработка), в которую вы собираетесь отправить запрос на перенос, выполнив:
исправления ветки git upstream / development
-
Добавьте свои усовершенствованные коммиты прямо в эту недавно созданную ветку.
git commit -m «ваше сообщение»
-
Отправьте эту ветку на свой собственный разветвленный пульт (можно назвать origin).
- Сравните и отправьте новый запрос на перенос с чистой историей фиксации.
- Кроме того, рекомендуется удалить ветку после слияния запроса на перенос.
- И вы можете прокомментировать и закрыть свои предыдущие запросы на включение.
9
user_19
29 Апр 2014 в 18:08
У меня была только одна фиксация в запросе на перенос, и я использовал git commit --amend
для ее обновления. Затем я сделал принудительное нажатие с помощью git push -f
, чтобы моя измененная фиксация заменила исходную. Запрос на вытягивание автоматически принял новую фиксацию. (На самом деле он показал обе фиксации, но когда я перезагрузил страницу, старая фиксация исчезла.)
Таким образом, хотя принудительная отправка обычно не рекомендуется, она может быть полезна для запросов на вытягивание. Это не рекомендуется, потому что, если кто-то основывает коммит поверх вашего, ему придется выполнить перебазирование после вашего изменения. Но поскольку никто не должен основывать свою работу на проверяемом пул-реквесте, в этой ситуации это должно быть довольно безопасно.
37
Malvineous
28 Сен 2015 в 08:28
Перевод статьи «How to make your first pull request on GitHub».
Что такое форк?
Когда нам нравится чей-то репозиторий и мы хотели бы иметь его в собственном аккаунте на GitHub, мы делаем форк («вилку») этого репозитория, чтобы иметь возможность работать с ним отдельно.
Когда мы делаем форк репозитория, мы
получаем экземпляр всего репозитория,
со всей его историей. После форка мы
можем делать с ним все, что угодно:
оригинальная версия при этом не будет
задета.
Что такое пул-реквест?
Пул-реквесты нужны. Когда мы хотим
принять участие в групповой разработке
проектов с открытым исходным кодом.
Например, пользователь Павел делает
форк репозитория ThanoshanMV (автора статьи,
— прим. перев.) и вносит изменения в свой
экземпляр. После этого Павел отсылает
пул-реквест ThanoshanMV, который может либо
принять его, либо отклонить. По сути это
что-то вроде письма «Не будете ли вы так
любезны, уважаемый ThanoshanMV, внести мои
изменения в свой оригинальный репозиторий?»
Как можно стать контрибьютором
проекта?
Участие в проекте с открытым исходным
кодом не обязательно предполагает
работу именно с кодом. Контрибьютором
(участником) можно стать и другими
способами, некоторые из них описаны
ниже.
- Дизайн. Можно создать макеты
проекта, чтобы повысить удобство его
использования, усовершенствовать
навигацию или меню, создать рисунки
для лого или футболок, написать
руководство по стилю проекта. - Писательство. Можно написать
документацию проекта или улучшить уже
существующую, перевести документацию
на свой язык, создать новостную рассылку
для проекта, написать руководства для
пользователей или заняться формированием
папки с примерами использования. - Организаторские задачи. Можно
связывать дублирующиеся issues, предлагать
новые метки для issues, предлагать закрытие
старых, но еще открытых issues, задавать
вопросы в новых — чтобы подстегивать
развитие дискуссии. - Помощь другим людям. Можно
отвечать на вопросы в открытых issues,
проверять код других разработчиков,
предлагать помощь в качестве наставника. - Написание кода. Можно помогать
в решении возникших проблем, предлагать
создание новых фич, а также улучшать
инструментарий и тестирование.
Давайте создадим наш первый
пул-реквест!
1. Форк репозитория
Чтобы сделать форк репозитория, нужно
нажать кнопку «Fork» в верху страницы.
Таким образом вы создадите экземпляр
всего этого репозитория в своем аккаунте.
2. Клонирование репозитория
Когда репозиторий уже есть в вашем
аккаунте, вы можете клонировать его на
свою машину и в дальнейшем работать с
ним локально.
Чтобы клонировать репозиторий, нажмите
кнопку «clone» и скопируйте ссылку.
Откройте терминал и запустите следующую
команду. С ее помощью репозиторий будет
клонирован на вашу машину.
$ git clone [HTTPS ADDRESS]
Теперь у вас есть копия ветки master
основного онлайн-репозитория проекта.
Переходим в клонированную директорию:
$ cd [NAME OF REPOSITORY]
3. Создание ветки
При работе с репозиторием хорошей
практикой считается создание отдельной
ветки для внесения изменений, причем
это не зависит от размеров проекта.
Имя ветки должно быть коротким и
отражать те изменения, которые вы
вносите.
Создадим ветку при помощи команды git
checkout:
$ git checkout -b [Branch Name]
4. Внесение изменений и коммит
Внесите необходимы изменения в проект
и сохраните их. Затем запустите команду
git status: вы увидите внесенные изменения.
Добавьте эти изменения в только что
созданную ветку при помощи команды git
add:
$ git add .
Теперь вы можете сделать коммит этих
изменений при помощи команды git commit:
$ git commit -m "Adding an article to week 02 of articles of the week"
5. Отправка изменений на
GitHub
Чтобы отправить изменения на GitHub
(сделать push), нужно определить имя
удаленного репозитория.
$ git remote
Имя данного удаленного репозитория
— «origin».
После определения имени можно безопасно
отправить изменения на GitHub.
git push origin [Branch Name]
6. Создание пул-реквеста
Перейдите в свой репозиторий на GitHub.
Там есть кнопка «Compare & pull request» —
кликните ее.
Введите необходимые детали относительно того, что именно вы сделали (чтобы поставить ссылку на issues, возмользуйтесь знаком «решетки»). После этого можно нажать кнопку подтверждения внизу.
Поздравляю! Вы создали свой первый пул-реквест. Если его примут, вы получите уведомление по электронной почте.
7. Синхронизация вашего форка
с основной веткой
Прежде чем создавать пул-реквест в
оригинальный репозиторий, нужно
синхронизировать свой экземпляр этого
репозитория с оригинальным.
Даже если вы не собираетесь отправлять
пул-реквест в оригинальный репозиторий,
все равно лучше синхронизироваться с
ним. Со времени создания форка в
оригинальном репозитории могли добавиться
новые фичи, а также могли быть исправлены
какие-то баги.
Проделайте следующие действия, чтобы
обновить свой репозиторий и внести
соответствующие изменения в свою ветку
master:
1. Для начала, проверьте, в какой ветке
вы находитесь.
$ git branch
Вы получите список всех веток, причем
активная будет подсвечена зеленым.
2. Переключитесь в ветку master.
$ git checkout master
3. Добавьте оригинальный репозиторий
в качестве upstream-репозитория.
Чтобы вытащить изменения из оригинального репозитория и перенести их в свою версию, нужно добавить оригинальный git-репозиторий в качестве upstream-репозитория.
$ git remote add upstream [HTTPS]
Здесь [HTTPS] это url, который нужно
скопировать из основного репозитория.
4. Fetch репозитория
Заберите (fetch) все изменения из
оригинального репозитория. Коммиты,
сделанные в оригинальном репозитории,
будут сохранены в локальной ветке под
названием upstream/master.
$ git fetch upstream
5. Слейте изменения
Слейте (merge) изменения из upstream/master с
вашей локальной веткой master. Таким образом
главная ветка вашего форка репозитория
синхронизируется с upstream-репозиторием
без потери ваших локальных изменений.
$ git merge upstream/master
6. Отправьте изменения на GitHub
На этом этапе ваша локальная ветка
синхронизирована с веткой master оригинального
репозитория. Если вы хотите обновить
свой GitHub-репозиторий, нужно отправить
в него изменения.
$ git push origin master
Примечание. После синхронизации ветки master вашего форка вы можете при желании удалить remote. Но в будущем вам еще придется обновлять/синхронизировать ваш репозиторий, поэтому лучше его сохранить.
$ git remote rm [Remote Name]
8. Удаление ненужной ветки
Ветки создаются с какими-то конкретными
целями. Когда цель достигнута, необходимость
в ветке отпадает, поэтому ее можно
удалить.
$ git branch -d [Branch Name]
Вы можете удалить и версию этой ветки
на GitHub.
git push origin --delete [Branch Name]
Итоги
GitHub это мощный инструмент для контроля
истории версий. Каждый может стать
контрибьютором проекта с открытым
исходным кодом. Делается это путем
отправки пул-реквестов.
Чтобы стать контрибьютором, не
обязательно писать код: есть и другие
способы принять участие в проекте.
Наконец, я хотел бы также сказать, что не стоит переживать, если ваши пул-реквесты отклонят. Мейнтейнеры тратят много времени на улучшение своих проектов и они, безусловно, лучше знают эти проекты, чем вы. Поэтому не стоит переживать, если они решат не вливать в свой проект ваши изменения.
Edit me
На предыдущем занятии Используем клиент GitHub для десктопа, мы использовали Github Desktop для управления рабочим процессом коммитов, ветвления и слияния. На этом занятии мы будем выполнять аналогичные действия, но с использованием браузерного интерфейса, который предоставляет Github, вместо использования терминала или Github Desktop.
Понимание процесса Pull request является важным для анализа изменений в опен-сорс проекте с несколькими участниками. Использование интерфейса GitHub также удобно, если рецензенты не знакомы с терминалом или Github Desktop.
Создание изменение в отдельной ветке
По умолчанию в новом репозитории есть одна ветка с именем «Master». Обычно, когда при внесении изменений или просмотра / редактировании, создается новая ветка и вносятся все изменения в ветку. Затем, по окончании, владелец репо объединяет изменения из новой ветки в «Master» через «pull request».
Для создания изменений в отдельной ветке:
- Со стороны рецензента переходим к тому же репозиторию GitHub, который был создан на предыдущем занятии (можно создать новый репо). Создаем новую ветку, выбрав раскрывающееся меню ветки и введя имя новой ветки, например «sme-review». Затем нажмите клавишу Enter.
При создании новой ветки, содержимое из главной (или любой другой ветки, которая сейчас просматривается) копируется в новую ветку. Процесс похож на «Сохранить как» с существующим документом.
- Кликаем в область ввода текста, а затем кликаем по иконке карандаша («Edit this file»), чтобы отредактировать файл.
- Вносим изменения в контент и прокручиваем вниз экрана до области Commit changes. Поясняем причину изменений и подтверждаем изменения в своей ветке sme-review, нажав кнопку
Commit changes
.
Рецензенты могут продолжать вносить изменения таким образом, пока не закончат просмотр всей документации. Все изменения делаются в этой новой ветке, а не в мастере.
Создание Pull request
Теперь представим, что процесс проверки завершен, и пришло время объединить ветку с мастером. Ветка объединяется с “Master” через Pull request
. Любой «соавтор» в команде с правами на запись может инициировать и завершить Pull request (добавлять соавторов можете в «Настройки»> «Соавторы)
Для создания Pull request:
- Находим на экране вкладку “Pull request”.
- Кликаем по кнопке
New pull request
- Выбираем ветку (sme-review), которую хотим сравнить с веткой “Master”
Когда мы сравниваем ветку с мастером, мы увидим список всех изменений. Мы можем просмотреть изменения в двух режимах просмотра: Unified или Split (это вкладки, показанные справа от содержимого). Unified показывает правки вместе в одной области содержимого, тогда как split показывает два файла рядом.
- Кликаем на кнопку
Create pull request
. - Поясняем pull request и снова кликаем кнопку
Create pull request
.
Владелец репозитория увидит pull request и сможет принять меры для его объединения.
Процесс Pull request
Теперь посмотрим на процесс со стороны владельцем проекта, который получил новый Pull request. Владельцу нужно обработать Pull request и объединить ветку sme-review с “Master”.
- Переходим на вкладку “Pull requests”, чтобы увидеть ожидающие запросы на извлечение.
- Кликаем по запросу и смотрим изменения, выбрав вкладку Files changed.
Также стоит обратить внимание, что если запрос на извлечение выполняется для более старой версии мастера, где исходное содержимое мастера больше не существует или перемещено в другое место, процесс слияния будет более трудным для выполнения.
- Переходим на вкладку “Conversation” и кликаем кнопку
Merge pull request
. - кликаем
Confirm merge
.
Ветка sme-review объединяется с мастером. Теперь “Master” и ветка sme-review совпадают (ветки “смержены”).
- Кликаем кнопку
Delete branch
для удаления ветки sme-review.
Не обязательно удалять ветку сразу. Старые ветки всегда можете удалить , щелкнув ссылку на ветки при просмотре репозитория Github, а затем нажмите кнопку Delete
(корзина) рядом с веткой.
Если посмотреть на список веток, то после удаления ветка sme-review больше не отображается.
Добавление участников в проект
Иногда необходимо добавлять соавторов в проект Github, чтобы они могли вносить изменения в ветку. Если другие участники проекта, не являясь соавторами, захотят внести изменения, они получат сообщение об ошибке. (Inviting collaborators to a personal repository)
Человек без прав на запись, может “форкнуть” (скопировать) репо, а не вносить изменения в ветку в том же проекте. Однако копирование проекта клонирует весь репозиторий, а не создает ветку в том же репозитории. Форк (копия) будет существовать в учетной записи пользователя GitHub. Можно объединить форкнутый репозиторий (это типичная модель для опен-сорс проектов со многими внешними участниками), но этот сценарий, вероятно, менее распространен для технических писателей, работающих с разработчиками в тех же проектах.
Для добавления соавторов в проект:
- В репозитории проекта переходи на вкладку “Settings”.
- Нажимаем на кнопку
Collaborators
в левой части. - Вводим имена пользователей Github тех, кому хотим дать доступ в области Collaborator.
- Нажимаем на кнопку
Add collaborator
.
🔙
Go next ➡
29 октября, 2016 12:07 пп
2 101 views
| Комментариев нет
VPS
Работа над открытым программным обеспечением – это не только полезный опыт, но и возможность сделать программное обеспечение лучше для конечных пользователей. Рассмотрев ваш pull-запрос, владелец проекта может предложить вам внести в него некоторые изменения: переместить и переписать код, очистить ветки и т.п. Подробную информацию об этих операциях вы найдёте в данном руководстве.
Требования
- Предварительно установленная система контроля версий Git. Подробные инструкции по установке можно найти здесь.
- Аккаунт и навыки работы в GitHub. Больше полезной информации можно найти в руководстве Создание pull-запроса на GitHub.
Перемещение кода и чистка комментариев
Если владельцы проекта не отвечают на ваш pull-запрос, то, вероятно, разработанный вами код ранее был предложен в коммитах других пользователей. В таком случае вам нужно выполнить rebase.
Команда rebase позволяет перемещать ветки путём изменения коммита, на котором они основаны. С её помощью можно переместить код на последние коммиты ветки master. Перемещать код с помощью rebase нужно очень осторожно, особенно если вы собираетесь опубликовать ветку: эта команда может удалить работу других пользователей. Убедитесь, что вы работаете с правильными коммитами и на правильной ветке проекта, прежде чем начать перемещение.
Как и в предыдущем руководстве, перейдите в каталог, в котором хранится код, и извлеките последнюю версию исходного репозитория проекта.
cd repository
git fetch upstream
После этого вы можете очистить комментарии, склеив или переименовав сообщение о коммите (возможно, этого делать не придётся, если вы не создавали множества маленьких коммитов).
Для начала нужно выполнить интерактивное перемещение. Этот процесс позволяет редактировать созданные ранее коммиты, объединять два или несколько коммитов в один, удалять и восстанавливать коммиты. Для этого нужно указать количество коммитов.
Чтобы узнать номера коммитов, созданных вами в этом проекте, введите команду:
git log
Команда вернёт такой результат:
commit 46f196203a16b448bf86e0473246eda1d46d1273
Author: username-2 <email-2>
Date: Mon Dec 14 07:32:45 2015 -0400
Commit details
commit 66e506853b0366c87f4834bb6b39d941cd034fe3
Author: username1 <email-1>
Date: Fri Nov 27 20:24:45 2015 -0500
Commit details
В выводе содержатся все коммиты для репозитория текущего проекта, то есть, ваши коммиты будут смешаны с коммитами других разработчиков. Если проект имеет очень широкую историю с большим количеством авторов, вы можете запросить только свои коммиты:
git log --author=your-username
Если же вы разрабатываете несколько веток, используйте параметр –branches[=<branch>], чтобы выполнить поиск коммитов по веткам.
Зная количество коммитов, вы можете выполнить перемещение с помощью команды:
git rebase -i HEAD~x
- Параметр –i запускает интерактивное перемещение;
- HEAD ссылается на последний коммит ветки master;
- x – количество коммитов, сделанных вами с начала работы над веткой.
Если же вы не знаете, сколько коммитов вы сделали в ветке, вам нужно узнать, на каких коммитах основана ветка. Для этого используйте:
git merge-base new-branch master
Эта команда вернёт длинную строку – хэш коммита. Он выглядит примерно так:
66e506853b0366c87f4834bb6b39d341cd094fe9
Вы можете использовать этот хэш в команде:
git rebase -i 66e506853b0366c87f4834bb6b39d341cd094fe9
Любая из перечисленных выше команд откроет в текстовом редакторе файл, содержащий все коммиты ветки. После этого вы сможете объединить или переименовать коммиты.
Объединение коммитов
Команда squash позволяет объединить два (и больше) маленьких коммита в один большой.
Перед каждым коммитом в файле вы увидите слово pick:
pick a1f29a6 Adding a new feature
pick 79c0e80 Here is another new feature
# Rebase 66e5068..79c0e80 onto 66e5068 (2 command(s))
Теперь везде, кроме первой строки, слово pick нужно заменить словом squash, чтобы объединить коммиты:
pick a1f29a6 Adding a new feature
squash 79c0e80 Here is another new feature
Теперь можно сохранить и закрыть файл. После этого откроется новый файл, в котором все сообщения о коммитах будут объединены в один коммит. В этом файле вы можете переименовать коммит на своё усмотрение, а затем сохранить и закрыть файл, после чего на экране появится вывод:
Successfully rebased and updated refs/heads/new-branch.
Переименование коммита
Эта функция позволяет исправлять ошибки и опечатки, допущенные в сообщениях коммитов.
После интерактивного перемещения у вас будет открытый файл, который выглядит так:
pick a1f29a6 Adding a new feature
pick 79c0e80 Here is another new feature
# Rebase 66e5068..79c0e80 onto 66e5068 (2 command(s))
Перед каждым коммитом, который вы хотите переписать, замените pick словом reword:
pick a1f29a6 Adding a new feature
reword 79c0e80 Adding a second new feature
# Rebase 66e5068..79c0e80 onto 66e5068 (2 command(s))
Сохраните и закройте файл. После этого в текстовом редакторе откроется изменённое сообщение о коммите. Если вы хотите снова изменить сообщение, вы можете сделать это сейчас, прежде чем сохранить и закрыть новый файл.
Завершение перемещения
Внеся все необходимые изменения в коммиты, нужно завершить перемещение ветки. Для этого запустите команду:
git rebase upstream/master
После этого Git перенесёт все коммиты на последнюю версию ветки master. Если при этом произошёл конфликт, Git предложит вам несколько вариантов его решения. Выберите один из предложенных вариантов и введите:
git rebase --continue
После этого Git завершит перемещение.
Обновление pull-запроса
После перемещения история ветки будет переписана, и вы больше не сможете использовать команду git push, потому что путь изменится.
Чтобы загрузить изменённую ветку, используйте флаг –force или –f. Так вы сможете сообщить Git о том, что вы знаете обо всех загружаемых изменениях.
Установите значение simple в push.default (по умолчанию в Git 2.0+).
git config --global push.default simple
Убедитесь, что вы работаете на правильной ветке:
git checkout new-branch
Already on 'new-branch'
. . .
После этого можно запустить force-push:
git push -f
Эта команда обновит pull-запрос.
Восстановление утраченных коммитов
Если вы случайно потеряли нужный вам коммит, Git может восстановить его.
Для этого существует команда git reflog, которая находит утраченный коммит и создаёт из него новую ветку.
Reflog – это сокращение от reference logs, так называются логи, которые фиксируют изменения в локальном репозитории.
В локальном репозитории нужно запустить:
git reflog
Команда вернёт:
46f1962 HEAD@{0}: checkout: moving from branch-1 to new-branch
9370d03 HEAD@{1}: commit: code cleanups
a1f29a6 HEAD@{2}: commit: brand new feature
38f2fc2 HEAD@{3}: commit: remove testing methods
. . .
Вы сможете узнать утраченный коммит по тексту. Хэш коммита находится слева, перед HEAD@{x}.
С помощью этой информации вы можете восстановить коммит.
git checkout -b new-new-branch a1f29a6
Эта команда создаст новую ветку на основе третьего коммита.
После этого вы можете создать новый pull-запрос или же снова переместить ветку.
Примечание: Если вы недавно запускали команду git gc, чтобы удалить ненужные файлы и оптимизировать локальный репозиторий, вероятно, вы не сможете восстановить утраченные коммиты.
Проверка кода
Отправляя pull-запрос, вы вступаете в диалог с исходным репозиторием и его владельцем. Другие разработчики смогут рассмотреть вашу работу и решить, стоит ли принимать новые функции в исходный репозиторий проекта. Потому при отправке pull-запроса очень важно чётко объяснить, почему вы создаёте этот запрос и все прилагаемые к нему коммиты.
В зависимости от проекта, запрос может оставаться на рассмотрении в течение некоторого времени. Возможно, владелец проекта предложит вам поработать над вашим pull-запросом, изменить его.
При отправке запроса ведётся журнал заметок от других разработчиков, в котором вы сможете найти все обновления и обсуждения. Возможно, во время рассмотрения вашего запроса вам придется сделать несколько дополнительных коммитов. Это позволяет вам доработать свой запрос.
Ваш pull-запрос будет поддерживаться через Git и автоматически обновляться, пока вы будете добавлять коммиты для данной ветки и загружать их в форк.
Очень важно, чтобы ваши коммиты отвечали всем требованиям проекта.
Однако случается и так, что даже очень хорошо проработанные запросы не принимаются владельцами проекта. Не стоит расстраиваться: в сети существует огромное количество других открытых сообществ. Возможно, тот вклад, к которому в одном сообществе отнеслись критически, будет по достоинству оценен другими разработчиками.
Удаление ветки
Если ваш запрос был принят в исходный репозиторий, вам нужно обновить локальный репозиторий.
Об этом уже говорилось в предыдущем руководстве (в разделе о синхронизации).
Для этого введите:
git checkout master
git pull --rebase upstream master
git push -f origin master
Теперь нужно очистить локальную и удалённую ветку. Чтобы удалить локальную ветку, введите:
git branch -d new-branch
Флаг –d удаляет указанную в команде ветку.
Примечание: Вместо new-branch нужно ввести название своей ветки.
Чтобы удалить удалённую ветку, введите:
git push origin --delete new-branch
Теперь все разработанные вами изменения находятся только в главном репозитории проекта.
Заключение
Теперь вы знаете, как внести свой вклад в разработку открытого проекта, и умеете отправлять и редактировать pull-запросы.
Tags: Git, Github, pull