Как объединить ветку и сохранить авторство - PullRequest
15 голосов
/ 22 июля 2010

скажем, мой коллега Джон создал филиал под названием «Джон». Он имеет 10 коммитов Джона. Когда дело доходит до слияния с мастером, меня просят слить.

Это то, что я делаю

git checkout -b john origin/john
git rebase master
git checkout master
git merge john --squashed
git add .
git commit -m 'merged branch john'

Однако теперь происходит то, что это мой идентификатор против объединенного коммита. А потом приходят люди, спрашивают меня, почему я изменил определенную часть кода.

Как мне объединить все комиты в ветке Джона в один коммит, чтобы Джон был автором. Я думаю, что git commit interactive может помочь, но не совсем понял.

Ответы [ 4 ]

9 голосов
/ 22 июля 2010

Проблема здесь в том, что git merge --squash будет применять те же изменения, что и обычное слияние, но без сохранения информации о слиянии. Затем, когда вы делаете коммит, он такой же, как любой коммит, который вы делаете: он приписывается вам. Вы можете изменить информацию об авторе коммита, используя git commit --author="Original Author <email@server>". См. git-commit (1) для получения дополнительной информации о переключателе --author.

Но у меня вопрос: почему вы подавляете слияние? Почему бы просто не сделать не раздавленное слияние? Если кто-то сделает git blame, он будет соответствующим образом приписан коммиту первоначального автора.

8 голосов
/ 22 июля 2010

Если вы сделаете следующее:

git checkout -b john origin/john
git rebase master
git checkout master
git merge --no-ff john # forces a merge commit to be recorded

вы оба сможете сохранить авторство коммитов Джона и , чтобы иметь возможность отменить слияние, отменив SHAкоммит слияния.

6 голосов
/ 11 мая 2013

Вы также можете --amend авторство впоследствии, если вы уже сделали слияние вот так:

git checkout master
git merge my_branch
git commit --amend --author="My Nick <my.adress@email.com>"
git push origin master

Работает по желанию и добавляет указанного автора в коммит слияния. Все просто.

5 голосов
/ 16 января 2012

Способ, который я только что сделал, состоит в том, чтобы сдавить с помощью rebase:

 git rebase --onto master -i master remote/branch

Затем в редакторе пометьте все коммиты как "squash".Это дает один с приложением оригинального автора.Хотя в действительности вы ничего не получаете, в отличие от копирования оригинального автора в --author.Мне просто было неудобно это делать.

По какой-то причине моя ГОЛОВКА была впоследствии отсоединена, поэтому я снова подключил к ней мастера через:

 git checkout -B master HEAD
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...