Форум программистов, компьютерный форум, киберфорум
Git
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
2 / 2 / 2
Регистрация: 29.06.2018
Сообщений: 129

Не понимаю как выполнять некоторые действия с коммитами в git?

17.01.2020, 08:47. Показов 1662. Ответов 3
Метки git (Все метки)

Студворк — интернет-сервис помощи студентам
Начинаю работать с системой управления версиями git. При работе над первым своим проектом возник вопрос, можно править уже сделанные коммиты или нет. Вот такую последовательность действий я сделал в своём проекте:
1. создал файл index.html и .htaccess, сделал коммит
2. создал файл action.php и изменил index.html, сделал коммит
3. создал index.php как аналог index.html, но уже на языке PHP, включил в него также функционал из action.php ( index.html и action.php стали больше не нужны), сделал коммит
4. нашёл ошибку в index.php, отредактировал его, сделал коммит
5. обнаружил, что у меня не закомичено удаление index.html и action.php, закомитил

Собственно, никак не могу понять как сделать 2 вещи:
комментарий к коммиту 1 я считаю неправильно информативным и хочу его переименовать. Прочитал в инете, что переименовать можно только теущий коммит, то есть сначала мне нужно сделать checkout на коммит 1, Делаю:
Bash
1
2
git checkout <хэш коммита 1>
git commit --amend -m "новый комментарий"
после данных действий при просмотре истории через "git log" я вижу, что все мои коммиты пропали кроме изменённого, а при просмотре через "git log --all" вижу, что коммитов стало уже не 5, а 6

Второй вопрос, как удалить коммиты 3 и 4, чтобы они изчезли в том числе из "git log --all", у меня по сути было 3 изменения в проекте, коммиты с 3 по 5 по сути являются шагами одного изменения и хранить в истории коммиты 3 и 4 никакой надобности нет.

Честно говоря, когда я читал руководство по git, я сомневался правильно ли я всё понимаю, начиная с той главы, где рассказывалось про ветки. Вот, например, правильно ли я использую команду checkout, её вроде используют как для переключения между коммитами, так и для переключения между ветками.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.01.2020, 08:47
Ответы с готовыми решениями:

Git переключение между коммитами
Здравствуйте уважаемые форумчане, подскажите пожалуйста как делать переключение между коммитами одной ветки, что бы делать откать рабочей...

Как не выполнять действия при определенном условии?
программа работает нормально, проблема только в одном при выводе сообщения &quot;неправильно введено значение&quot;, она еще выводит сообщения...

Возможно выполнять действия на стороннем ресурсе (как будто пользователь)
Возможно с помощью PHP выполнить таки действия отправить заготовленные данные в 2 формы логин, пароль на сервер &lt;input...

3
Эксперт .NET
 Аватар для Rius
13092 / 7651 / 1672
Регистрация: 25.05.2015
Сообщений: 23,293
Записей в блоге: 14
17.01.2020, 09:34
Цитата Сообщение от Isur Посмотреть сообщение
Прочитал в инете, что переименовать можно только теущий коммит,
Нет.
Цитата Сообщение от Isur Посмотреть сообщение
о есть сначала мне нужно сделать checkout на коммит 1
Нет.
Функции "переименования" нет, т.к. имён нет. Есть комментарии к коммитам.
Последний коммит в ветке можно поправить через --amend, типа того, что вы выше написали.
А вот уже сохранённые ранее - через rebase.
Цитата Сообщение от Isur Посмотреть сообщение
Второй вопрос, как удалить коммиты 3 и 4, чтобы они изчезли в том числе из "git log --all", у меня по сути было 3 изменения в проекте, коммиты с 3 по 5 по сути являются шагами одного изменения и хранить в истории коммиты 3 и 4 никакой надобности нет.
Если в git log не видите, значит всё уже удалено. Не стоит беспокоиться.
Если надо схлопнуть несколько коммитов в ветке в один, то поможет rebase -i.
Цитата Сообщение от Isur Посмотреть сообщение
Вот, например, правильно ли я использую команду checkout, её вроде используют как для переключения между коммитами, так и для переключения между ветками.
Для переключения между коммитами или восстановления файлов в то состояние, что закоммичено. Но в git ветка - это просто указатель на коммит. Он перемещается по мере добавления новых коммитов.
0
2 / 2 / 2
Регистрация: 29.06.2018
Сообщений: 129
18.01.2020, 05:27  [ТС]
Rius, вы мне ответом сломали мозг окончательно.
Я, если что, по git читал вот это вот руководство.
Ладно, будем разбираться.
Цитата Сообщение от Rius Посмотреть сообщение
А вот уже сохранённые ранее - через rebase
Так что всё-таки делает rebase? Переносит коммит в другую ветку? То есть, чтобы изменить комментарий к не последнему коммиту, мне нужно создать новую ветку, перенести в неё коммиты, затем сделать новую ветку мастером, а старую грохнуть?
0
Эксперт .NET
 Аватар для Rius
13092 / 7651 / 1672
Регистрация: 25.05.2015
Сообщений: 23,293
Записей в блоге: 14
18.01.2020, 07:50
Цитата Сообщение от Isur Посмотреть сообщение
Я, если что, по git читал вот это вот руководство.
Рекомендую хорошее рук-во: https://git-scm.com/book/ru/v2
Цитата Сообщение от Isur Посмотреть сообщение
Так что всё-таки делает rebase? Переносит коммит в другую ветку?
Много чего делает... В общем случае берёт кучу коммитов (ветку) и переносит их на другую базу. Пересаживает, так сказать. Попутно можно выполнить разные операции. Посмотрите опции git rebase -i:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
...
# Commands:
# p, pick <commit> = use commit - перестановка порядка коммитов в истории
# r, reword <commit> = use commit, but edit the commit message - исправление текстового описания
# e, edit <commit> = use commit, but stop for amending - исправление самого содержимого коммита
# s, squash <commit> = use commit, but meld into previous commit - объединение коммитов
# f, fixup <commit> = like "squash", but discard this commit's log message
# x, exec <command> = run command (the rest of the line) using shell
# d, drop <commit> = remove commit
# l, label <label> = label current HEAD with a name
# t, reset <label> = reset HEAD to a label
# m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]
# .       create a merge commit using the original merge commit's
# .       message (or the oneline, if no original merge commit was
# .       specified). Use -c <commit> to reword the commit message.
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
#       However, if you remove everything, the rebase will be aborted.
...
Цитата Сообщение от Isur Посмотреть сообщение
То есть, чтобы изменить комментарий к не последнему коммиту, мне нужно создать новую ветку, перенести в неё коммиты, затем сделать новую ветку мастером, а старую грохнуть?
Нужно освоить работу с rebase. Предположения ошибочны.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.01.2020, 07:50
Помогаю со студенческими работами здесь

Как можно заставить программу выполнять определенные действия после нажатия клавиши ENTER
кто-нибудь может подсказать!! я новенький в VB и почти ни какого опыта программирования в этой среде поэтому столкнулся вот с такой ...

Как можно выполнять действия для SQLlite: сравнение схем, обновление, генерация скриптов
На данный момент в моем приложении используется MS SQL. в проекте на c# (net 3.5) есть проект базы данных. при необходимости изменения...

Как сделать так, чтобы пользователь мог выполнять определенные действия на сайте только после авторизации?
Здравствуйте, уважаемые товарищи программисты и сисадмины! У меня есть такая проблема: я создаю сайт по типу доски онлайн объявлений. И...

программа работает алгоритм работы понимаю только как некоторые фрагменты кода работают не понятно!
вопросы написал в комментариях посмотрите пожалуйста! using System; using System.Collections.Generic; using...

Как при перемещении указателя на текущую запись навесить некоторые действия
Есть TADODataset. Надо чтобы при перемещении указателя на текущую запись происходили некоторые действия. То есть пользователь нажимает...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru