Ответ 1
Вы можете вибрировать XX для мастеринга.
git checkout master
git cherry-pick <commit ID of XX>
И удалите последнюю фиксацию из ветки функции с помощью git reset.
git checkout Feature-branch
git reset --hard HEAD^
Есть ли способ переустановить одну фиксацию из ветки на другую ветку?
Итак, у меня есть
-- -- -- -- -- (Master)
\
-- -- -- -- -- XX (Feature-branch)
и все, что я хочу сделать, это переустановить последнее комманду Feature-branch на master и rollback Feature-branch one commit.
-- -- -- -- -- XX (Master)
\
-- -- -- -- -- (Feature-branch)
Как мне это сделать?
Вы можете вибрировать XX для мастеринга.
git checkout master
git cherry-pick <commit ID of XX>
И удалите последнюю фиксацию из ветки функции с помощью git reset.
git checkout Feature-branch
git reset --hard HEAD^
git rebase --onto master branch~1 branch
Это говорит: "Переустановите диапазон коммитов между последней ветвью и ветвью (т.е. XX commit) на кончике ведущей ветки"
После этой операции branch
подсказка перемещается на commit XX
, поэтому вы хотите установить ее с помощью
git checkout branch
git reset --hard [email protected]{1}^
Что говорит "reset ответ ветвления на фиксацию перед ее предыдущим состоянием"
Итак, выбор вишни - это более простое решение...
Это довольно просто сделать на самом деле. Решение состоит в том, чтобы выполнить интерактивную перезагрузку и "удалить" все коммиты, которые вы не хотите включать в rebase.
git rebase -i <target_branch>
где target_branch
- это ветка, на которую вы хотите переустановить на
Затем вы отредактируете открытый файл и pick
обязуетесь, а drop
(или d
для краткости) все фиксации, которые вы не хотите брать.
@Charles правильный. В любом случае, я использовал это много раз, прежде всего для того, чтобы переустановить конкретную конфигурацию в проекте
* a8f9182 (HEAD -> production) production configuration | * daa18b7 (pre) preproduction configuration |/ | * d365f5f (local) local configuration |/ * 27d2835 (dev) amazing new feature that will save the world * | 56d2467 (master) boring state of the art for project |/
я создаю для него новую команду:
$ cat ~/bin/git-rebaseshot COMMIT=$1 DEST=${2:-HEAD} git rebase ${COMMIT}^ ${COMMIT} --onto $DEST
Обычно вы хотите автозаполнять имена ветвей для этой команды, поэтому добавьте ее для поиска этой функции (добавление в .bashrc или .profile):
_git_rebaseshot () { __gitcomp_nl "$(__git_refs)" }
git автозаполнение будет искать его
вы можете использовать эту команду следующим образом:
# rebase config on prepro on actual HEAD
$ git rebaseshot prepro
# rebase config on local onto dev
$ git rebaseshot local dev
# rebase production config on master
$ git rebaseshot pro master
Когда вы делите функции правильно, возможности бесконечны.
* a8f9182 (HEAD -> postgres) BBDD config * a8f9182 (local) local config * a8f9182 (debug) log level config * a8f9182 (dev) new feature |
Я думаю, что это quilt людям нравится делать.
эта команда будет работать в любом случае с любым ша /ref, который вы предоставляете:
$ git rebaseshot <Feature branch> master
$ git rebaseshot <commit of XX> master