Как изящно вытащить запрос

Git

Эта статья в основном используется для объяснения процесса PR, а также возможных ситуаций и решений, которые помогут вам лучше сотрудничать в разработке.

Если вам нужно понять основы git, перейдите по следующим ссылкам:

[Git Collaboration Общий порядок] (nuggets.capable/post/684490…)

Запросы на вытягивание часто используются командами и организациями, которые совместно используют общие репозитории.

Многие проекты с открытым исходным кодом на Github используют запросы на вытягивание для управления изменениями от участников, потому что они предоставляют способ уведомить сопровождающих проекта об изменениях, внесенных другими участниками, и разрешить обновление кода перед слиянием с главной веткой. Просмотрите и обсудите это.

  • Существует два основных рабочих процесса для создания запросов на включение;

    • Сделать запрос на включение в разветвленный репозиторий;

    • Сделать пулреквест на ветку в репозитории;

В этой статье в основном объясняется первый метод.

1. Вилочный склад

  1. Разветвите репозиторий проекта, в котором вам нужно участвовать, на свой собственный github;

2. git клонировать этот форк-проект

  1. В своем собственном github найдите проект fork и git клонируйте его локально.

3. Добавьте вышестоящий репозиторий

  1. Следуя предыдущему шагу, в этом проекте выполните следующие операции для подключения вышестоящего репозитория к локальному репозиторию, который является адресом нашего форка:

git remote add <name> <url>
  1. Другие вспомогательные функции:

git remote -v  //查看所有上游仓库名字和git地址:

4. Поддерживайте синхронизацию с вышестоящими репозиториями

  1. Обновите ветку под "указанным" пультом:

    git fetch <name> <branch>
  2. Приведенная выше команда может обновлять только один пульт за раз.Если у нас несколько пультов, мы можем использовать:

    git remote update
    //或者
    git fetch --all

  3. Когда мы используем команду pull для извлечения последнего кода вышестоящей ветки, если локальная ветвь отстает от восходящей ветки, будет сгенерирован новый коммит слияния с избыточной информацией, поэтому рекомендуется использовать:

git pull --rebase <remote> <branch>
//等同于以下两条命令
git fetch <remote> <branch>
git rebase <remote>/<branch>

5. Поднимите вопрос

Проблемы предоставляют отличный способ отслеживать, улучшать и исправлять ошибки в вашем проекте. Это похоже на электронное письмо, но его можно обсудить вместе.

Для сопровождающих проекта

  1. Рекомендуется, чтобы сопровождающие проекта поддерживали шаблон задачи проекта, а участники отправляли задачи в соответствии с этим шаблоном;

  2. Есть два способа создать шаблон задачи:

    • Создано через гитхаб:help.GitHub.com/articles/adult…/

    • Второй — вручную создать шаблон задачи:help.GitHub.com/articles/ma…/

      Пример:

      (1) В проекте добавьте шаблон ошибки и файл шаблона функции:

      Содержимое шаблона bug_request следующее:

      (2) После этого вклад откроет задачу в github, чтобы увидеть соответствующие параметры шаблона:

      Выберите запрос функции и заполните по мере необходимости:

    • Шаблон задачи должен быть создан в ветке по умолчанию.

для авторов

  1. Прежде чем сделать новый запрос на включение, лучше всего поднять вопрос для всеобщего обсуждения;

  2. Пожалуйста, обратитесь к спецификации проблемы в проблеме и предоставьте достаточно информации, чтобы помочь другим понять;

  3. Пожалуйста, добавьте соответствующие теги к своим проблемам, чтобы вы могли легко классифицировать и фильтровать проблемы:

    • Назначенные — это делегаты — люди, ответственные за продвижение вопроса;

    • Проблема может иметь несколько ярлыков;

    • Milstone соответствует группе вопросов проекта, функции или периода времени: например, номер версии, конкретный срок, рефакторинг новых функций и т. д.

  4. Вы можете подписаться на представленную проблему, чтобы узнать о ходе ее решения:

6. Создайте новую ветку

  1. Участникам рекомендуется создать новую собственную ветку, поработать над этой веткой и, наконец, слиться с основной веткой с помощью запроса на извлечение.

git checkout -b feature_x //不加-b则是切换到某一分支上,加上-b就是创建且切换
  1. При окончательном нажатии используйте:

    git push --set-upstream origin <分支名>

    Зафиксируйте новую ветку в удаленном репозитории.

    Если вышестоящему репозиторию также необходимо построить эту ветку, это можно сделать с помощью:

    git push --set-upstream <remote> <分支名>

7. Отправьте информацию о коммите

После внесения изменений в проект нам нужно сгенерировать коммит для документирования наших изменений. Ниже приведена спецификация Angular для формата фиксации:

(1) Формат

Информация о представлении состоит из трех частей:Header,BodyиFooter.

<Header>
​
<Body>
​
<Footer>

Среди них Заголовок обязателен, а Тело и Нижний колонтитул можно опустить.

1> Header

Раздел «Заголовок» состоит всего из одной строки и включает два поля:type(обязательно) иsubject(обязательный).

<type>: <subject>

type

type используется для описания категории коммита, можно использовать следующие категории:

  • подвиг: новая функция (особенность)

  • исправить: исправить ошибки

  • документ: документация

  • style: Формат (изменения, не влияющие на выполнение кода)

  • рефакторинг: рефакторинг (то есть не новая функция и не изменение кода, исправляющее ошибку)

  • тест: добавить тест

  • рутинная работа: изменения в процессе сборки или вспомогательные инструменты

subject

subject — это краткое описание цели коммита.

  • Начните с глагола и используйте настоящее время от первого лица, например, изменить, не изменить.

  • Не добавляйте точку (.) в конце

2> Body

Часть Body — это подробное описание этого коммита, которое можно разделить на несколько строк. Ниже приведен пример.

More detailed explanatory text, if necessary.  Wrap it to 
about 72 characters or so. 
​
Further paragraphs come after blank lines.
​
- Bullet points are okay, too
- Use a hanging indent

Уведомление:Должна быть указана мотивация изменения кода, а также сравнение с предыдущим поведением.

3> Footer

​ Нижний колонтитул должен включать: (1) критические изменения, (2) закрытие проблемы;

Breaking Changes:

​ Если текущий код несовместим с предыдущей версией, раздел нижнего колонтитула начинается сBREAKING CHANGEВ начале следует описание изменения, а также причина изменения и способ миграции. Этот вид использования меньше, и вы можете понять.

Раздел выпуска:

  • Связать проблему по коммиту:

    Если текущая информация об отправке связана с проблемой, вы можете связать эту проблему в разделе нижнего колонтитула:

    issue #2

  • Закройте задачу по фиксации, когда она отправлена ​​вветвь по умолчаниюможет использоваться в информации о представлении, когдаfix/fixes/fixed , close/closes/closedилиresolve/resolves/resolvedДождитесь ключевого слова, за которым следует номер проблемы, которая закроет проблему:

Closes #1

Обратите внимание, что если он не отправлен в ветку по умолчанию, проблема не может быть закрыта, но соответствующая информация будет отображаться под проблемой, указывающей, что проблема была закрыта.Когда ветвь объединена с ветвью по умолчанию, проблема может быть закрыто. .

Как показано на рисунке ниже, коммит, который закрывает проблему, отправляется в ветку по умолчанию:

И когда другие филиалы хотят закрыться:

4> Примеры

Вот полный пример:

feat: 添加了分享功能
​
给每篇博文添加了分享功能
​
- 添加分享到微博功能
- 添加分享到微信功能
- 添加分享到朋友圈功能
​
Issue #1, #2
Closes #1

Сообщение коммита выше должно быть в состоянии объяснить, что оно означает.

8. Интегрируйте информацию о фиксации, чтобы сохранить информацию о фиксации в чистоте

(1) Очистить записи фиксации с помощью git rebase -i

С помощью rebase -i мы можем выполнить следующее:

  • Изменить предыдущую информацию о коммите;

  • Объединить несколько сообщений фиксации в одно;

  • Удалить информацию о коммите.

Обратите внимание, что эти коммиты представляют собой информацию, которая еще не была отправлена;

Используйте rebase -i для входа в интерактивный режим

Есть 6 вариантов перебазирования на выбор:

  • pick : pick означает принятие коммита;

  • reword: опция reword может изменить информацию о коммите;

  • редактировать: можно изменить информацию о коммите коммита, в отличие от reword, эта опция может приостановить процесс перебазирования, позволяя вам добавить больше информации о коммите, что позволяет разделить большой коммит на более мелкие коммиты или удалить изменения, сделанные в коммите ошибочные изменения;

  • squash: эта команда позволяет объединить два или более коммитов в один коммит. Коммит вдавливается в коммит над ним. Git дает вам возможность написать новое сообщение коммита, описывающее эти два изменения.

  • fixup: это похоже на сквош, но объединяемый коммит отбрасывает свое сообщение. Коммит просто объединяется с коммитом над ним, а предыдущее сообщение коммита используется для описания двух изменений.

  • exec: Это позволяет вам запускать произвольные команды оболочки для коммита.

Пример для объяснения

Вот пример сквоша:

Как показано на рисунке, есть три записи фиксации:

воплощать в жизньgit rebase -i:

Войдите в интерфейс редактирования, если мы хотим объединить две записи фиксации, мы можем редактировать следующим образом:

Запись фиксации стала:

(2) Отменить операцию перебазирования

  1. воплощать в жизньgit reflogНайдите идентификатор коммита;

    • Журнал ссылок может просматривать локальные операции, связанные с изменениями проекта, такими как фиксация, клонирование, перебазирование и т. д., с момента создания локального репозитория.git logзаключается в просмотре текущего репозитория и всех предыдущих коммитов.

    • git reflogПо умолчанию на самом делеgit reflog show Head;можно использоватьgit reflog show --allпросматривать статус всех веток;

  2. воплощать в жизньgit reset --hard <commit ID>;

(3) Возврат к состоянию фиксации

Если вы хотите отозвать запись фиксации, вы можете использовать метод отката, но обратите внимание, что этот метод также потеряет ваши последующие изменения.

  1. воплощать в жизньgit logКоманда для просмотра записи коммита:

    Как показано выше, вы можете увидеть хеш-значение коммита;

    если увеличить--pretty=onelineпараметра, вы можете отображать только номер версии и примечания при отправке.

  2. воплощать в жизньgit reset --hard commit_id:

    Например, нам нужно вернуться к新增MVC模式предыдущую версию, затем выполните:

    git reset a5f2a27f02d32b666e01c24ed2218598db57a183 //此为默认方式,不带任何参数的git reset它回退到某个版本,只保留源码,回退commit和index信息

    Если это параметр --hard, то произойдет полный откат до определенной версии, а локальное рабочее пространство также станет содержимым предыдущей версии:

    git reset --hard a5f2a27f02d32b666e01c24ed2218598db57a183

    Если это параметр --soft, то записи рабочей области и области временного хранения будут сохранены, и вы сможете сразу зафиксировать в следующий раз:

    git reset --soft a5f2a27f02d32b666e01c24ed2218598db57a183

    В этом случае при нажатии выполните:

    git push --force 

9. Отправить в удаленный репозиторий

  1. Перед отправкой вы должны снова вытащить вышестоящий репозиторий и сравнить локальную фиксацию с удаленной фиксацией.Если в удаленном репозитории есть новое обновление и есть конфликт с локальным репозиторием, то вам нужно сначала разрешить конфликт, а затем git добавить && git совершить ;

10. новый запрос на извлечение

  1. Создайте новый запрос на вытягивание в своем собственном проекте и выберите, какую ветку с какой веткой объединить:

  1. Выберите рецензентов, руководителей, теги и другую информацию;

11. Рецензент проводит проверку

  1. Если новый код не нужно запускать, проверяющий может оценить, объединен ли он после проверки;

  2. Рецензент кода может установить исходный репозиторий запроса на включение в качестве вышестоящего репозитория, извлечь проверенный код, а затем запустить его, чтобы определить, следует ли выполнять слияние или нет, на основе результатов выполнения;

  3. Существует три режима слияния, которые можно выбирать в каждом конкретном случае:

Другие случаи

  1. Отменить все локальные модификации (уже совершенные);

    git reset Head^   //可加参数--hard或者--soft 

  2. Отменить уже подготовленные файлы, то есть отменить предыдущую операцию «git add».

    git reset Head 

    (Неотслеживаемые файлы не получают изменений, т.е. файлы без git add)

  3. Откатите локальное состояние до того же, что и удаленное:

    git fetch origin/master
    git reset origin/master //可加参数--hard或者--soft

  4. Просмотрите конкретное содержимое записи коммита:

    git show <commit ID> 
    //也可以用
    git show Head^^

  5. cherry-pick

    Cherry-pick — это выбор фиксации, с которой нам нужно работать. Его можно использовать для переноса изменений фиксации в других ветках в текущую ветку, но миграция — это только копия, которая создаст новую запись фиксации.

    1.切换到 develop 分支。
    2.通过 git log,找到 C 的 SHA1 值。
    3.通过 git cherry-pick <C的SHA1> ,将 C 的修改内容合并到当前内容分支 develop 中。
    4.若无冲突,过程就已经完成了。如果有冲突,按正常冲突解决流程即可。

    Для других операций по выбору вишни вы можете проверить справочные ссылки, приведенные позже.

  6. Используйте журнал изменений для печати информации о фиксации (при условии, что информация о фиксации записана в соответствии со спецификацией angular)

    npm install -g conventional-changelog-cli //安装全局包;
    conventional-changelog -p angular -i CHANGELOG.md -s -r 0 //第一次使用时,执行此命令,会生成一个CHANGELOG.md文件
    conventional-changelog -p angular -i CHANGELOG.md -s  //以上生成的更改日志基于自上一个semver(语义化版本)标记以来的提交。

    Как правило, информация журнала изменений печатается при выпуске пакета (выпуска), а журнал изменений фактически является одним из этапов выпуска.

  1. Дополнительные инструкции по эксплуатации см. в другом документе по общей команде git.

Ссылка на ссылку

пр:woohoo.thinkappendix.com/learn/gitfox…

спецификация коммита и журнала изменений:Вууху. Руан Ифэн.com/blog/2016/0…

угловая спецификация:docs.Google.com/document//…#

API выпуска github:developer.GitHub.com/V3/issues/#…

git рефлог:Woohoo.Atlas is Ian.com/git/tutor IA…

git rebase : help.GitHub.com/articles/AB…/

блог woo woo woo.cn on.com/Draco содержит/afraid/…

шаблон выпуска:GitHub.com/Dev открыть документ E…

Проблема в фиксации:help.GitHub.com/articles/ кроме…/

журнал изменений:Уууу, эта лошадь plus.com/package/con…

Обычная подача:Обычный коммит — .org/wolf/this-Han…

Вишневый выбор:blog.CSDN.net/QQ_32452623…