|
|||||
|
Git - полезные примерыПросмотр логовНесколько примеров форматирования отображения логов в удобном формате: $ git log --pretty=format:"%H [%cd]: %an - %s" --graph --date=format:%c $ git log --pretty=format:"%h - %ar : %s" Склейка коммитовСклейкой коммитов в Git нужно пользоваться весьма осторожно, если над проектом работает более одного человека, так как она может существенно усложнить работу других разработчиков с репозиторием. git rebaseПеред склейкой коммитов в git необходимо предварительно закоммитить все изменения в проекте и весьма желательно сделать резервную копию, например так: $ git tag -a backup -m 'Backup' Для примера будет использоваться вот такая история коммитов: $ git log --pretty=format:"%h : %s" cb9d634 : Commit 5 - the freshest, last commit bdd925d : Commit 4 08f380e : Commit 3 6084726 : Commit 2 0fbcc50 : Commit 1 - initialization, the oldest commit Commit 1 - самый старый коммит, выполненный сразу после создания репозитория, Commit 5 - самый новый. Склейка коомитов в середине репозиторияДля склейки 3 коммитов (Commit 3-4 нужно склеить с Commit 2), запускается git rebase в интерактивном режиме, опция HEAD~4 обозначает, что нужно открыть в интерактивном режиме 4 самых старых коммита (4 коммита от первого): $ git rebase -i HEAD~4 После этого в текстовом редакторе откроется такой текст: pick 6084726 Commit 2 pick 08f380e Commit 3 pick bdd925d Commit 4 pick cb9d634 Commit 5 - the freshest, last commit # Rebase 0fbcc50..cb9d634 onto 0fbcc50 (4 commands) # ... Редактируем данные так, чтобы напротив коммитов 3 и 4 вместо комманды pick была установлена squash, после чего нужно сохранить файл и закрыть текстовый редактор. В интерактивном режиме обязательно должен присутствовать и тот коммит, к которому нужно приклеить предыдущие с коммандой pick, иначе в результате склейки произойдет ошибка и получится совсем не тот результат, который ожидался. После этого редактор снова откроется, но уже для того, чтобы внести изменения в название нового коммита, содержащего в себе 3 склееных коммита (Commit 2-4) - назовем его: "Commit 2 - 4" сохраним и закроем файл. После этого можно проверить результат склейки, запустив: $ git log --pretty=format:"%h : %s" 5ff1f80 : Commit 5 - the freshest, last commit 40213c8 : Commit 2 - 4 0fbcc50 : Commit 1 - initialization, the oldest commit Как видно, склейка коммитов прошла успешно. Стоит обратить внимание, что у Commit 5 изменилась хеш-сумма, что не удивительно, так как все более новые коммиты зависят от более старых (каждый новый коммит содержит хеш старого, и если он изменится, то изменится и хеш нового), и соответственно любые изменения в более старых коммитах автоматически вызовут изменения хеша более новых. Не стоит экспериментировать с git rebase -i ... над репозиторием реального проекта. Если в интерактивном режиме удалить строку с одним или более коммитом, то это повлечет удаление отсутствующих коммитов из репозитория. Чтобы после запуска git rebase -i ... в интерактивном режиме никакие изменения не были бы внесены в историю коммитов, нужно не просто закрыть файл без сохранения, а удалить все содержимое файла и сохранить его. Склейка первого коммита, созданного при инициализации репозиторияТакая склейка происходит почти так же, как и предыдущая, но для того, чтобы склеить первый, созданный при инициализации репозитория, коммит, нужно запустить rebase с параметром --root $git rebase -i --root И установить s или squash перед всеми, более младшими коммитами, которые нужно объединить с инициализирующим коммитом. Сохранение изменений в удаленном репозитории после git rebaseЧтобы сохранить изменения в удаленном репозитории после редактирования истории коммитов при помощи git rebase, необходимо запускать комманду push с опицией f: $ git push -f Если над проектом работает несколько человек, то после выполнения git push -f другим разработчикам придется заново скачивать весь проект. Если они ранее внесли изменения в свои локальные копии репозитория и не объединили их с основным (merge, push), это может вызвать у них большие сложности с добавлением новых изменений в новый репозиторий с измененной историей.
Опубликовано: 2019/12/08
HTML-код ссылки на эту страницу:
<a href="https://petrenco.com/git.php?txt=722" target="_blank">Git - полезные примеры</a> 3928
Добавить комментарий
|