Подтвердить что ты не робот

Как объединить филиал и сохранить авторство

скажем, что мой коллега Джон создал филиал под названием "john". У Джона есть 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'

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

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

4b9b3361

Ответ 1

Если вы выполните следующее:

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 коммита слияния.

Ответ 2

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

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

Ответ 3

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

git checkout master
git merge my_branch
git commit --amend --author="My Nick <[email protected]>"
git push origin master

Это работает по желанию и добавляет указанный автор к фиксации слияния. Просто как это.

Ответ 4

То, как я только что это сделал, - раздавить через rebase:

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

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

По какой-то причине мой начальник был отсоединен после этого, поэтому я снова привязал к нему мастера:

 git checkout -B master HEAD