2013-07-17 2 views
0

Я работаю в филиале, скажем master. Изменения уже перенесены в удаленный репозиторий. Моя история выглядит так:Возвращающаяся ветка в git

*----*----*----* master 

Тогда я понимаю, что я, возможно, сделал что-то неправильно и хочу начать с другого подхода. Я делаю это, создавая новую ветвь:

*----*----*----* master 
    \ 
     *----*----* different-approach 

После некоторых новых фиксаций, я решил, что новый подход работает лучше, чем в главной ветви, так что я хочу использовать, что теперь на master отрасли , Так что я слияния:

git checkout master 
git merge different-approach 

В случае возникновения конфликта, я всегда выбираю версию с different-approach слияния. Проблема в том, что для некоторых файлов конфликт отсутствует, поэтому git делает автоматическое слияние, оставляя в плохом файле из ветки master.

Что я могу сделать в этом случае? Кажется, что нет никакого способа принудительного ручного слияния для всех файлов в git. Конечно, я могу клонировать репозиторий в другой каталог и копировать все файлы из него в исходный каталог, прежде чем совершать слияние. Но нет ли более чистого и более простого способа сделать это?

ответ

2

Исправить это, возвращая нежелательные коммиты.

// Revert all commits in master one-by-one 
$ git checkout master 
$ git revert --no-edit different-approach..master 
$ git merge different-approach 

// Revert all commits in master at once 
$ git checkout master 
$ git revert --no-commit different-approach..master 
$ git commit -m "Revert foo" 
$ git merge different-approach 
+0

Это может вызвать проблему, если другие люди нажали изменения в мастер. Их фиксации также будут отменены. – gtrig

+0

Ну, я ожидаю, что автор сможет запустить любой просмотрщик журналов, чтобы подтвердить, что он вернул. –

-1

Если вы хотите, чтобы полностью игнорировать изменения на master не на different-approach вы можете:

git checkout master 
git reset --hard different-approach 

Внимание, это будет полностью уничтожить изменения на master не на different-approach.

+0

Я предполагаю, что это не сработает, если мастер уже нажат. По крайней мере, этого не должно быть. Вот почему мне нужно слияние. – petersohn

+0

Вы также хотите изменить мастер на пульте дистанционного управления? Если это произойдет после 'git reset -hard different-approach', вы можете' git push -f'. Предупреждение об этом переписывает историю на пульте дистанционного управления, поэтому, похоже, предыдущие изменения так и не произошли. – cforbish

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