Стоит отметить, что вы можете вызвать конструктор родительского класса в вашем конструкторе, например:
class A { /* ... */ };
class B : public A
{
B() : A()
{
// ...
}
};
Но, нет, вы не можете вызвать другой конструктор того же класса.
Вы пишете, что хотите удалить коммитов из ветки master. Это может вызвать проблемы, если «главная» ветка была опубликована (ну, коммиты после публикации rel_2009_07_18
), и кто-то основывал свою работу на вашей «главной». Но, возможно, это не проблема в вашем случае.
Оба решения ниже предполагают, что у вас нет незавершенных изменений
$ git checkout master
$ git branch separate_branch
$ git reset --hard rel_2009_07_18
Теперь «мастер» находится по адресу rel_2009_07_18
, а «отдельная ветвь» находится там, где был «мастер». Окончательный результат точно такой же, как в наборе предложенных вами шагов (переименуйте «мастер» в «отдельную ветвь», воссоздайте «мастер» в rel_2009_07_18
), единственная разница в рефлогах.
$ git checkout master
$ git branch separate_branch
$ git checkout rel_2009_07_18 -- .
$ git clean -df
$ git commit -m 'Reverted to state at rel_2009_07_18'
Обратите внимание, что это решение не тестировалось! YMMV.
Для меня самый простой вариант - использовать git-cherry-pick
.
В основном вам нужно переключиться на ветку, в которой вы хотите коммитить, а затем использовать log исходной ветки ( git log master
) вы находите SHA-1 каждого коммита, который хотите, и выбираете его в текущую ветку.
Как только это будет сделано, вы можете вернуться назад чтобы отрегулировать и отменить все эти нежелательные коммиты с помощью git-reset
и привет, теперь у вас есть ветка с вашими новыми коммитами и чистая главная ветка.