Git log rebases - PullRequest
       12

Git log rebases

11 голосов
/ 24 января 2012

Я знаю, что GIT rebases переписывает историю - то есть изменятся идентификаторы коммитов.Тем не менее, есть ли способ отследить, когда ветвь была перебазирована и из какой ветки?

РЕДАКТИРОВАТЬ: у меня есть ветка разработки 'A' и ветка темы 'B'.«А» разделяется командой.В какой-то момент «А» был заново основан с основной ветвью.В результате повторной базы (и последующих коммитов), когда я обновил ветку темы, я увидел несоответствия.Я пытаюсь найти правильного человека, с которым можно поговорить, чтобы решить проблемы.

Ответы [ 3 ]

12 голосов
/ 24 января 2012

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

Вы можете увидеть эту информацию в gitk (на панели различий в левом нижнем углу) или в выводе git log --pretty=fuller (как в более полном, чем полном объеме).).Пример вывода журнала:

commit b8624718b97a39a04637c91ec3517c109f3f681d
Author:     Original Author <original@author.com>
AuthorDate: Sun Aug 8 02:15:10 2010 -0300
Commit:     New Committer <new@committer.com>
CommitDate: Mon Jan 23 17:29:39 2012 -0800

    a lovely commit message

...

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

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

git log --all --grep='commit subject from a rebased commit'
git log --all -S'void this_function_was_added() {'

Если у вас нет исходного коммита где-либо вистория больше, это будет сложнее.Надеюсь, вы сможете узнать, отследив человека, который это сделал, и, если они этого не знают, попросив их запустить git reflog show <branch> в своем хранилище, чтобы просмотреть историю этой ветви.

8 голосов
/ 24 января 2012
git reflog

позволит вам просмотреть историю всех ваших рабочих процессов git. В проекте, над которым я работаю, вот три верхние записи reflog:

151a1da HEAD@{0}: filter-branch: rewrite
db8c822 HEAD@{1}: checkout: moving from fixes to master
db8c822 HEAD@{2}: checkout: moving from master to fixes

В первом столбце отображается SHAID. Таким образом, вы можете использовать стандартные команды git на этом SHAID например мерзавец 151a1da

2 голосов
/ 24 января 2012

Reflog - это механизм для записи, когда верхушка веток обновляется. Эта команда предназначена для управления записанной в ней информацией.

"По сути, каждое действие, которое вы выполняете внутри Git, где хранятся данные, вы можете найти в журнале ссылок. Git очень старается не потерять ваши данные, поэтому, если по какой-то причине вы думаете, что это так, у вас есть шанс если вы можете выкопать его, используя git reflog. Это означает, что вы можете использовать его в качестве защитной сети: вам не нужно беспокоиться о том, что слияние, перебазировка или другие действия разрушат вашу работу, так как вы можете найти ее снова используя эту команду. "

Больше на эту тему в

...