Подтвердить что ты не робот

Как я могу изменить, какие контрольные точки совершать в git?

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

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

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

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

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

4b9b3361

Ответ 1

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

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


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

  • Оформить новую ветку: git checkout -b new_branch master
  • создайте "новую" ведущую ветвь и укажите ее на фиксацию origin/master: git branch -f master origin/master

Ответ 2

$ 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

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

Ответ 4

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

git stash
git checkout -b old_master_was_here
git branch -d master
git checkout origin/master
git checkout -b master

Ответ 5

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