Я зафиксировал некоторые изменения из функциональной ветки в удаленную основную ветку и открыл запрос на извлечение. Но я забыл исправить нарушения phpcs (запущенный сниффер кода), для которых мне нужна разница между тем, когда не было изменений в файле/фиксации и изменениями, которые я сделал - мне нужно вернуться в точку, где я был до фиксации - чтобы все строки изменены, говоря «модифицировано», и мне нужно сделать это для 3 коммитов этой функциональной ветки. Кто-нибудь, пожалуйста, помогите мне, как этого добиться или как это называется?
Пожалуйста, добавляйте только те теги, которые имеют отношение к вашей проблеме. Речь идет только о git, а не о PHP или phpsniffer.
git rebase не работает
Почему бы нет? Это позволяет вам редактировать каждый коммит в списке задач. Это позволяет вам выполнить сброс перед фиксацией, таким образом, устанавливая/удаляя изменения по своему усмотрению, а затем повторяя фиксацию.
Что я должен написать в этот файл?
изменить или выбрать [commit_id] приводит к невозможности применить [commit_id]
Теперь я каким-то образом запустил редактирование для 4 коммитов, но ни один из файлов не был изменен, поэтому я думаю, что это не то, что я хочу делать.
Отвечает ли это на ваш вопрос? stackoverflow.com/questions/57179501/… или даже описано на справочной странице git rebase
Этот вопрос, который вы связали, я думаю, слишком сложный. Представьте себе пустую ветку без коммитов, назовем ее EmptyBranch. И я хочу скопировать и вставить все изменения из FixBranch (изменения уже зафиксированы и отправлены) в этот EmptyBranch, чтобы я мог запустить инструмент, который должен увидеть изменения. В то время как этот EmptyBranch в результате является FixBranch. Итак, в конце концов, у меня есть еще один коммит, когда инструмент запустился и показал мне ошибки, которые я исправил. Можно ли без ну.. копипаста? (Я хочу, чтобы все это происходило из одной ветки, 2 ветки просто для демонстрации)
И одну вещь, которую я забыл упомянуть, если это вообще имеет значение, в 3 из 5 коммитов я создаю новый файл, другие - просто модификации. Итак, я хочу перейти на этап, где я могу видеть «измененные файлы» и/или «новые файлы» в git status/IDE.
Проверьте нужную ветку и убедитесь, что у вас нет незафиксированных изменений. Затем запустите «git reset HEAD~X» (x — количество коммитов, к которым вы хотите вернуться). Это должно оставить вас с набором промежуточных файлов, которые представляют все изменения в коммитах X, которые вы сделали. После того, как вы запустите свой инструмент проверки, вы можете подготовить новые изменения, которые он сделал, а затем зафиксировать все.
Отвечает ли это на ваш вопрос? Как вернуть репозиторий Git к предыдущему коммиту?
Используйте интерактивную перебазировку для редактирования/повторения всех ваших коммитов. Вам необходимо следовать процедуре, упомянутой в разделе разделения коммитов в документации 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 сделал свое дело после перебазирования, спасибо также за ссылку на часть документации.
Вы спрашиваете, как использовать
git rebase -i
?