2016-05-20 2 views
1

Я что-то новичок, поэтому не смейтесь слишком сильно ...git rebase вносит изменения в неродственную ветку?

Я проделал некоторую работу над веткой A и сделал несколько коммитов. Затем пришлось внести исправление, поэтому я создал ветку B и изменил несколько файлов. Затем, поскольку мастер не изменился, я думал, что это было бы проще и яснее, если бы я сделал:

мерзавец мастер
пересчитать динамические Git мастер фотографии
мерзавец слияния B

Но это примененные изменения от ветви А Что я не понимаю? Это не может быть так, как должно работать, не так ли?

ответ

0

При создании филиала B, вы были на ветви A, поэтому основание вашей отрасли B содержит всю работу, которую вы сделали в отрасли A. Вот почему эти ветви A теперь находятся в master. Диаграммно, у вас есть следующая ситуация:

branchA: A -- B -- C 
branchB: A -- B -- C -- D 

Правильная стратегия, чтобы сделать исправления в master бы создать ветку от master:

# assuming you start on branch B 
git checkout master 
git checkout -b master_hotfix 
# make the fix 
git commit -m 'made the hotfix' 
git checkout master 
git merge master_hotfix 
# carry on as you were 
git checkout branchB 

отменить то, что вы сделали, вы можете попробовать сбросив ветвь master до фиксации до того, как произошло ошибочное слияние. Введите git log и подсчитайте, сколько суммированных пришло в frok слияние с branchB. Затем введите:

git reset --hard HEAD~N 

где N это число фиксаций, которые вы хотите удалить из master. Затем примените описанные выше шаги для правильного создания исправления. Обратите внимание, что вы не должны использовать git reset, если вы уже нажмете ваш местный master на пульт. В этом случае вы можете попробовать использовать git revert, но может иметь смысл оставить master так, как есть, и просто слить branchB еще раз после того, как у вас есть полная работа.

+0

Вы правы. Оглядываясь назад на мою историю оболочек, это именно то, что я сделал. Я думал, что буду там сумасшедшим в течение часа или около того. –

Смежные вопросы