Мы используем репозиторий Azure DevOps Git в нашей организации. Недавно мы начали с GIT.
Я проверил одну локальную ветку с именем feature-123. Я внес несколько изменений, которые внес в местный филиал. Но я не закончил разработку функции, и мне пришлось переключиться на другое срочное исправление ошибки. Для этого я проверил новую локальную ветку с именем «bug-999», в которой я хочу обработать срочную ошибку. Я исправил ошибку и отправил bug-999 на удаленный доступ. Но я вижу, что мои коммиты из feature-123 также отправляются.
Итак, коммиты в моей первой локальной ветке переносятся в новую локальную ветвь, и когда я нажимал, они переходили на удаленный.
Вопросы:
- Как поступить с этим делом?
- Если я хочу нажать конкретную фиксацию (исключая предыдущие), как я могу это сделать?
Если вы начали ветку bug-999
из feature-123
, она содержит все коммиты feature-123
. — person Learner schedule 10.04.2021
Отвечает ли это на ваш вопрос? Предпочтительный рабочий процесс Github для обновления запроса на вытягивание после проверки кода (может быть, есть дубликат получше). Я подумывал написать ответ, но, хотя обстоятельства немного отличаются, ответ тот же. git rebase
и git push -f
— два инструмента, которые можно использовать для исправления ситуации. Избегать этого в первую очередь означает иметь хорошие привычки git (ветки). — person Learner schedule 10.04.2021
Эта проблема возникла из-за того, что ваша ветка исправления ошибок была создана из ветки функции. Следовательно, по умолчанию в нем будут все коммиты, которые уже были в вашей функциональной ветке. Ветка в git — это просто указатель на фиксацию. Следовательно, когда вы создали свою ветку исправления ошибок, git назначил еще один указатель на самую последнюю фиксацию ветки функции. Теперь всякий раз, когда вы добавляете фиксацию в ветку исправления ошибок, этот указатель просто перемещается вперед, сохраняя все предыдущие фиксации нетронутыми.
TL; DR: создавайте новую ветку (в данном случае исправление) на основе основной, а не функциональной ветки.
Вот шаги:
Допустим, у вас есть 2 ветки, а именно.
main
&feature1
. Ветвьfeature1
является ответвлениемmain
. Вы находитесь в веткеfeature1
и внесли некоторые изменения. Но вы понимаете, что есть срочная ошибка, которую нужно исправить в main. Вот что вы можете сделать —feature1
ветке ИЛИstash
их, используяgit stash
main
, используяgit checkout main
git checkout bugfixBranchName
Это гарантирует, что ваша вновь созданная ветка исправления ошибок основана на основной ветке, поэтому коммиты, сделанные в ветке
feature1
, не будут там в веткеbugfix
.Теперь перейдем к вашему второму вопросу, этому вопросу поможет вам ответить на этот вопрос.