Git — Github возвращает изменения из коммита

Я зафиксировал некоторые изменения из функциональной ветки в удаленную основную ветку и открыл запрос на извлечение. Но я забыл исправить нарушения phpcs (запущенный сниффер кода), для которых мне нужна разница между тем, когда не было изменений в файле/фиксации и изменениями, которые я сделал - мне нужно вернуться в точку, где я был до фиксации - чтобы все строки изменены, говоря «модифицировано», и мне нужно сделать это для 3 коммитов этой функциональной ветки. Кто-нибудь, пожалуйста, помогите мне, как этого добиться или как это называется?

Вы спрашиваете, как использовать git rebase -i?

knittl 29.09.2022 21:11

Пожалуйста, добавляйте только те теги, которые имеют отношение к вашей проблеме. Речь идет только о git, а не о PHP или phpsniffer.

M. Eriksson 29.09.2022 21:17

git rebase не работает

Qwertz 29.09.2022 21:41

Почему бы нет? Это позволяет вам редактировать каждый коммит в списке задач. Это позволяет вам выполнить сброс перед фиксацией, таким образом, устанавливая/удаляя изменения по своему усмотрению, а затем повторяя фиксацию.

knittl 29.09.2022 21:48

Что я должен написать в этот файл?

Qwertz 29.09.2022 22:05

изменить или выбрать [commit_id] приводит к невозможности применить [commit_id]

Qwertz 29.09.2022 22:17

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

Qwertz 29.09.2022 22:28

Отвечает ли это на ваш вопрос? stackoverflow.com/questions/57179501/… или даже описано на справочной странице git rebase

knittl 29.09.2022 22:59

Этот вопрос, который вы связали, я думаю, слишком сложный. Представьте себе пустую ветку без коммитов, назовем ее EmptyBranch. И я хочу скопировать и вставить все изменения из FixBranch (изменения уже зафиксированы и отправлены) в этот EmptyBranch, чтобы я мог запустить инструмент, который должен увидеть изменения. В то время как этот EmptyBranch в результате является FixBranch. Итак, в конце концов, у меня есть еще один коммит, когда инструмент запустился и показал мне ошибки, которые я исправил. Можно ли без ну.. копипаста? (Я хочу, чтобы все это происходило из одной ветки, 2 ветки просто для демонстрации)

Qwertz 29.09.2022 23:12

И одну вещь, которую я забыл упомянуть, если это вообще имеет значение, в 3 из 5 коммитов я создаю новый файл, другие - просто модификации. Итак, я хочу перейти на этап, где я могу видеть «измененные файлы» и/или «новые файлы» в git status/IDE.

Qwertz 29.09.2022 23:57

Проверьте нужную ветку и убедитесь, что у вас нет незафиксированных изменений. Затем запустите «git reset HEAD~X» (x — количество коммитов, к которым вы хотите вернуться). Это должно оставить вас с набором промежуточных файлов, которые представляют все изменения в коммитах X, которые вы сделали. После того, как вы запустите свой инструмент проверки, вы можете подготовить новые изменения, которые он сделал, а затем зафиксировать все.

Yazeed Sabri 30.09.2022 02:55

Отвечает ли это на ваш вопрос? Как вернуть репозиторий Git к предыдущему коммиту?

trojan 03.10.2022 23:16
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
12
77
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Используйте интерактивную перебазировку для редактирования/повторения всех ваших коммитов. Вам необходимо следовать процедуре, упомянутой в разделе разделения коммитов в документации git rebase, без фактического разделения ваших коммитов.

Перед запуском убедитесь, что у вас есть резервная копия вашей ветки и чистая рабочая копия (git stash push -u).

git rebase -i $basecommit
# change "pick" to "edit" for the commits you want to redo
# rebase will stop at first "edit" commit
git reset --soft HEAD^
# run your tool, make necessary changes
# add changes
git commit -C HEAD@{1} # make a new commit reusing message and author from the commit before reset
# resolve potential conflicts
# rinse and repeat

Другой вариант — использовать git cherry-pick:

git checkout $basecommit^{commit} # go to detached HEAD state
git cherry-pick --no-commit $firstcommit
# run your tool, make necessary changes
# add changes
git commit -C $firstcommit # make new commit reusing message and author from first commit
# repeat for $secondcommit, $thirdcommit, etc.
git checkout -B $yourbranch # label the newly created history with your branch name

Похоже, git reset сделал свое дело после перебазирования, спасибо также за ссылку на часть документации.

Qwertz 30.09.2022 09:32

Другие вопросы по теме