Как я могу изменить, какие контрольные точки совершать в git?
В git я делаю коммиты на главной ветке, когда действительно должен был работать над ветвью функций. Я хочу изменить это, чтобы мастер вернулся туда, где он был запущен, и то, что было на хозяине, теперь находится на новой ветке. В принципе, моя история фиксации выглядит так:
A -- B -- C -- D -- E
| |
| master
origin/master
И я хочу, чтобы это выглядело так:
master
|
A -- B -- C -- D -- E
| |
| new_branch
origin/master
Как я могу изменить, где находятся основные точки?
Ответы
Ответ 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).