кто-то послал меня, чтобы вытащить его изменения. Однако я не могу добавить свое имя в этот коммит - PullRequest
6 голосов
/ 27 февраля 2010

Кто-то раздвоил мой проект и внес несколько изменений. Все хорошо. Все его изменения в одном коммите. Теперь он попросил меня объединить его изменения. Проект размещен на github.

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

git pull git: //github.com/defunkt/grit.git master

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

Вопрос №: 2

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

Обновление:

Я ищу способ подписать такой коммит. http://github.com/rails/rails/commit/639e044298eed903566086d297ae51a535082e73

Ответы [ 2 ]

23 голосов
/ 28 февраля 2010

Автор / коммиттер / квитанции / Sign-офф

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

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

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

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

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

Способы добавления Acks

Если в вашем проекте сервер «Signed-off-by:» имеет статус Acks, вы можете легко добавить его, изменив коммит с помощью 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

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

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

Если можно переписать историю, тогда вы можете сделать локДля того чтобы добавить ветку «Ack», исправьте опечатку, а затем добавьте ее в основную ветку.

.
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 <your-branch> && git merge --no-ff --no-commit && git commit, вы можете добавить свой ack к соответствующим коммитам во время шага git rebase -i, затем использовать git checkout <your-branch> && git merge from-contributor, что может сделать ускоренную перемотку вперед, если наконечник <your-branch> является предком from-contributor.

Вы будете коммиттером любых измененных коммитов. Автор существующих коммитов останется без изменений, если вы не используете 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

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

Acking / Fixing Single Commit

Если вы имеете дело только с одним коммитом, git rebase -i HEAD~<N> шаги, описанные выше, могут быть просто git commit --amend.

2 голосов
/ 27 февраля 2010
$ git commit --amend
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...