скажем, то, что мой colleage John создал ответвление по имени 'Джон'. Это имеет 10 фиксаций John. Когда дело доходит до слияния назад для освоения они просят, чтобы я сделал слияние.
Это - то, что я делаю
git checkout -b john origin/john
git rebase master
git checkout master
git merge john --squashed
git add .
git commit -m 'merged branch john'
Однако теперь то, что происходит, - то, что это - мой идентификатор против объединенной фиксации. И позже люди приезжают, спрашивая меня, почему я изменял определенную часть кода.
Как я сворачиваю весь comitts в ответвлении Джона в одну фиксацию, таким образом, что John является автором. Я предполагаю, что мерзавец фиксирует интерактивный, может помочь, но мог не совсем понять.
Проблема в том, что git merge --squash
применит те же изменения, что и обычное слияние, но без сохранения информации о слиянии. Затем, когда вы совершаете коммит, он такой же, как и любой другой, который вы делаете: он приписывается вам. Вы можете изменить информацию об авторе коммита с помощью git commit --author = "Original Author
. См. git-commit (1) для получения дополнительной информации о переключателе - author
.
Но у меня вопрос: почему вы подавляете слияние? Почему бы просто не сделать слияние без сжатия? Если кто-то выполнит git blame
, он будет соответствующим образом отнесен к фиксации первоначального автора.
Если вы сделаете следующее:
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 коммита слияния.