кто-то отправил меня для получения по запросу его изменений. Однако я не могу добавить свое имя к той фиксации

Кто-то разветвил мой проект и внес несколько изменений. Вся польза. Все его изменения находятся в единственной фиксации. Теперь он попросил, чтобы я объединил его изменения. Проект размещается на GitHub.

Я следовал инструкциям, упомянутым по http://github.com/guides/pull-requests, и это - то, что я сделал

получение по запросу мерзавца git://github.com/defunkt/grit.git ведущее устройство

Однако из-за той команды теперь gitlog говорит, что другой человек сделал фиксацию. Я видел места, где кто-то еще делает фиксацию, и один человек проверяет его. Так как это - мой проект, как я добавляю свое имя для проверки списка.

Вопрос no:2

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

Обновление:

Я ищу способ закончить на фиксации как это. http://github.com/rails/rails/commit/639e044298eed903566086d297ae51a535082e73

6
задан Nick Vanderbilt 27 February 2010 в 22:29
поделиться

2 ответа

Автор / Committer / Acks / Sign-offs

Как записываются обзоры исправлений, определяется каждым проектом. Git напрямую поддерживает только два предопределенных поля идентификации: Author и Committer. Ни то, ни другое не полностью подходит для обозначения отзывов / благодарностей. Git имеет дополнительную поддержку для строк «Signed-off-by:», но это просто обычный текст в сообщении фиксации (в отличие от Author и Committer, которые управляются Git и присваивают им значение).

Как и все части сообщений о фиксации, значение «Подписано:» определяется каждым проектом. В проекте Git строки «Подписано:» означают что-то вроде «Я подтверждаю, что этот код совместим с лицензией этого проекта» (см. «Сертификат происхождения разработчика» в документе Git SubmittingPatches ).В проекте Git строки «Подтверждено:» означают что-то вроде «Я просмотрел это изменение, и оно кажется нормальным».

Типичный поток исправлений в проекте Git состоит в том, что участники генерируют подписанные исправления с помощью git format-patch -s и отправляют их в список рассылки проекта, где они собирают обсуждения и подтверждения (при необходимости) . Когда патч готов к применению, сопровождающий применяет его после добавления своего собственного «Подписано пользователем:». Таким образом, сопровождающий всегда является Коммиттером (за исключением некоторых подсистем, где коммиты выполняются с объединениями от сопровождающих подсистемы), но исходные участники по-прежнему остаются Автором. Этот рабочий процесс может иметь или не иметь смысла в других проектах.

Итак, «Подписано пользователем:» в вашем примере фиксации на GitHub - это просто текст в конце сообщения фиксации. Его точное значение - это то, какое значение проект придал этим строкам. Дополнительная идентификация, показанная для этого коммита (помеченная как «(коммиттер)» в представлении GitHub), связана с тем, что коммиттер отличается от автора. Это происходит, когда вы изменяете фиксацию (например, в конце ветки или во время перебазирования) или применяете патч, который включает заголовок «От:», который отличается от настроенного вами идентификатора. Чтобы изменить коммиттер, достаточно будет изменить чью-то фиксацию на добавление строки подписи или подтверждения (или исправить опечатку в сообщении о фиксации).

В общем, вам не следует беспокоиться о том, чтобы указать свою личность в поле Committer. Вы можете быть разумно обеспокоены тем, чтобы каким-то образом признать изменение, воплощенное в фиксации (например, сказать: «Я просмотрел это» или «Я одобрил это»).То, как вы это сделаете, зависит от обычаев и политики рассматриваемого проекта. Часто такие подтверждения выполняются путем добавления строк «нижний колонтитул» к сообщению фиксации.

Способы добавления подтверждений

Если «Подписано:» указывает сервер в качестве подтверждений в вашем проекте, вы можете легко добавить их, изменив коммиты с помощью git commit --amend -s . В противном случае это потребует внесения поправок в сообщение фиксации, чтобы включить любое указание, подходящее для вашего проекта.

Полное сохранение внесенной истории

Если сохранение исходной истории участника жизненно важно в вашей ситуации, вам, вероятно, следует использовать git pull --no-ff и добавить свой «Ack» в сообщение фиксации итогового коммита слияния. Поскольку вы не можете переписать, вам придется мириться с любыми опечатками в сообщениях коммита. В случае опечаток в контенте вы или исходный участник можете добавить фиксацию, исправляющую опечатку, либо до слияния, либо вы можете добавить исправление после слияния.

С исправлением содержимого после слияния:

git checkout <your-branch>
git pull --no-ff --no-commit <repo> <contributor's-branch>
git commit # add your "Ack", commit the merge
# fix content typo and stage it
git commit

Полное сохранение внесенной истории (с некоторыми дополнительными изменениями наверху)

С исправлением содержимого перед слиянием (или попросите соавтора сделать это в своем репозитории, затем потяните как выше, пропуская последний шаг исправления):

git fetch <repo> <contributor's-branch>:from-contributor
git checkout from-contributor
# fix content typo and stage it
git commit
git checkout <your-branch>
git merge --no-ff --no-commit from-contributor
git commit # add your Ack, commit the merge

Вы будете Автором и Коммиттером фиксации слияния и любых фиксаций исправления. Автор и участник коммитов участника останутся без изменений.

Переписывание некоторой внесенной истории (но с сохранением исходной точки ветвления)

Если можно переписать историю, вы можете создать локальную ветвь, содержащую коммиты вашего участника, используйте git rebase -i , чтобы добавьте свой «Подтверждение» и исправьте опечатку, а затем объедините ее с основной веткой.

git fetch <repo> <contributor's-branch>:from-contributor
git checkout from-contributor
git rebase -i HEAD~<N> # N is however many commits you have to go back to fix the typo

git checkout <your-branch>
git merge --no-ff --no-commit from-contributor
git commit # add your Ack, commit the merge

Вместо окончательного git checkout <ваша- ветка> && git merge --no-ff --no-commit && git commit , вы можете добавить свой ack к соответствующим коммитам во время шага git rebase -i , затем использовать git checkout && git merge from-members , что может привести к перемотке вперед, если кончик является предком from -partor .

Вы будете Коммиттером любых измененных коммитов. Автор существующих коммитов останется неизменным, если вы не используете git commit --reset-author . Вы будете Автором и Коммиттером любых новых коммитов (коммитов слияния и исправлений).

Перезапись любой или всей предоставленной истории

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

git checkout <your-branch>
git pull --rebase <repo> <contributor's-branch>
git rebase -i HEAD~<N> # fix-up typo, add Ack

Автор и Коммиттер будут такими же, как и выше сценарий перебазирования + слияния.

Подтверждение / исправление одиночной фиксации

Если вы имеете дело только с одиночной фиксацией, шаги git rebase -i HEAD ~ выше могут быть просто git commit - -amend вместо этого.

23
ответ дан 8 December 2019 в 04:29
поделиться
$ git commit --amend
2
ответ дан 8 December 2019 в 04:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: