Как я могу изменить, на какие основные точки коммитов в git? - PullRequest
64 голосов
/ 12 ноября 2010

В git я делал коммиты на ветку master, когда на самом деле мне следовало работать над веткой возможностей. Я хочу изменить это так, чтобы мастер вернулся туда, где он начал, а то, что было на мастере, теперь находится в новой ветви. По сути, моя история коммитов выглядит так:

A -- B -- C -- D -- E
          |         |
          |       master
     origin/master

И я хочу, чтобы это выглядело так:

        master
          |
A -- B -- C -- D -- E
          |         |
          |       new_branch
     origin/master

Как я могу изменить, где мастер очки?

Ответы [ 5 ]

68 голосов
/ 12 ноября 2010
  • спрятать ваши неподтвержденные: git stash
  • создать новую ветку: git branch new_branch
  • сброс мастера на источник / мастер: git reset --hard origin/master
  • снова оформить заказ: git checkout new_branch
  • снять изменения: git stash pop

stash / unstash не требуется, если ваше рабочее дерево чистое. просто убедитесь, что в вашем рабочем дереве нет изменений, потому что они будут удалены при сбросе --hard


другая возможность (быстрее и без необходимости прятать и сбрасывать):

  • оформить заказ на новую ветку: git checkout -b new_branch master
  • создайте «новую» главную ветку и укажите ее на исходную / главную фиксацию: git branch -f master origin/master
21 голосов
/ 24 мая 2016
$ git checkout master
$ git reset --hard <commit-id-for-master-to-sit-at>

например попробуйте это

$ mkdir example; cd example
$ git init
$ vi testFile.txt
(now add "test commit 1" to line 1 of file)
$ git add *
$ git commit
(add message "(+) 1st commit" to git commit)
$ vi testFile.txt
(now add "test commit 2" to line 1 of file)
$ git add *
$ git commit
(add message "(+) 2nd commit" to git commit)
$ vi testFile.txt
(now add "test commit 3" to line 1 of file)
$ git add *
$ git commit
(add message "(+) 3rd commit" to git commit)
$ git tag final_head
$ git reset --hard HEAD~1

В этом примере показано перемещение мастера в другой коммит. Обратите внимание, что тег позволяет сохранить старый мастер в случае:)

3 голосов
/ 28 августа 2015

Перейдите в .git / refs /heads / master, в котором есть хэш master, и измените его на любой другой.Я использую gitg, чтобы быстро найти хеш мастера, а затем проверить, что ход был успешным.

3 голосов
/ 09 марта 2014

Как обрисовано в общих чертах здесь , но еще проще, без перезагрузки, просто создайте новую ветвь, в которой находился мастер, затем безболезненно удалите мастер, снова извлеките место, в которое вы хотите переместить мастер, и создайте новый мастер ветки там:

git stash
git checkout -b old_master_was_here
git branch -d master
git checkout origin/master
git checkout -b master
0 голосов
/ 12 ноября 2010

Создайте новую ветвь new_branch на текущем HEAD (при условии, что HEAD = master), сбросьте мастер на C и снова переключитесь на new_branch (говоря в терминах SmartGit).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...