Git переустановить одно коммит

Есть ли способ переустановить одну фиксацию из ветки на другую ветку?

Итак, у меня есть

-- -- -- -- -- (Master)
            \
              -- -- -- -- -- XX (Feature-branch)

и все, что я хочу сделать, это переустановить последнее комманду Feature-branch на master и rollback Feature-branch one commit.

-- -- -- -- -- XX (Master)
            \
              -- -- -- -- -- (Feature-branch)

Как мне это сделать?

Ответ 1

Вы можете вибрировать XX для мастеринга.

git checkout master
git cherry-pick <commit ID of XX>

И удалите последнюю фиксацию из ветки функции с помощью git reset.

git checkout Feature-branch
git reset --hard HEAD^

Ответ 2

git rebase --onto master branch~1 branch 

Это говорит: "Переустановите диапазон коммитов между последней ветвью и ветвью (т.е. XX commit) на кончике ведущей ветки"

После этой операции branch подсказка перемещается на commit XX, поэтому вы хотите установить ее с помощью

git checkout branch
git reset --hard [email protected]{1}^

Что говорит "reset ответ ветвления на фиксацию перед ее предыдущим состоянием"

Итак, выбор вишни - это более простое решение...

Ответ 3

Это довольно просто сделать на самом деле. Решение состоит в том, чтобы выполнить интерактивную перезагрузку и "удалить" все коммиты, которые вы не хотите включать в rebase.

git rebase -i <target_branch> где target_branch - это ветка, на которую вы хотите переустановить на

Затем вы отредактируете открытый файл и pick обязуетесь, а drop (или d для краткости) все фиксации, которые вы не хотите брать.

Ответ 4

Ответ

@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