Создайте ветвь git и верните исходное состояние в исходное состояние
-
12-09-2019 - |
Вопрос
Недавно я облажался со своим репозиторием git и хотел бы узнать, есть ли какое-либо средство от этого.
Моя установка заключается в следующем:
Central repo on github.
Personal repo on github (which is a fork of Central)
+Central is setup as remote (upstream/master)
+Master branch (origin/master)
+Feature branch (origin/feature)
Мой рабочий процесс был примерно таким:
Need to fix something in Central:
1. checkout Master
2. Make changes
3. Pull from upstream/master and merge
3. Commit, push to upstream/master
Need to work on a New Feature:
1. Checkout/Create Feature branch
2. Work work work
3. Pull from upstream/master and merge
4. Commit, push to upstream/master
Таким образом, у меня всегда было первозданное состояние Централизации в моей Главной ветке.
Теперь то, что я сделал, это начал работать над Главной веткой вместо этого.Итак, я внес изменения в свой master и больше не могу отходить от него, чтобы получить копию Central.Всякий раз, когда мне нужно внести некоторые исправления в Central, я должен клонировать Central в другой каталог и работать оттуда.
Мой вопрос:Есть ли способ "вернуть" моему мастеру статус идентичной копии Центрального, переместив при этом все изменения, которые я внес на своем Мастере, в другую ветку (скажем, Feature)?
Я знаю, это сбивает с толку, и я был бы признателен за любую помощь.Я уточню, если что-то будет неясно.
Решение
Что ж, решение было довольно простым, на что намекнули Пэт Нотц и Бомбе.
#Make sure we're on the master branch
$ git checkout master
# Make a new branch to hold the work I've done
$ git branch old_master
# Save this branch on my remote repo (for backup)
$ git checkout old_master
$ git push origin old_master
# Reset my local master back to match the commit just before I started
# working on my new feature
$ git checkout master
$ git reset --hard 2aa93842342342
# Get it to be the same as my Central
$ git pull upstream master
# Now DELETE my master on my remote repo
$ git push origin :master
# And recreate it
$ git push origin master
# Branch created!
#* [new branch] master -> master
#
Теперь у меня есть две хорошие ветки:мастер и олд_мастер.С master, являющимся копией моего Центра для исправлений в производстве, и old_master, содержащим всю работу, которую я делал ранее!
Спасибо!
Другие советы
# Make sure we're on the master branch
$ git checkout master
# Make a new branch to hold the work I've done
$ git branch old_master
# Reset my local master back to match origin/master
$ git reset --hard origin/master
Теперь вы можете оформить заказ old_master
и используй его точно так же, как ты делал свой feature
филиал
Что именно вы имеете в виду под
Я испортил своего мастера и больше не могу отходить от него.
Вы всегда можете создать новую ветку из любого коммита в вашем репозитории, независимо от того, насколько “запутанной” она может быть – о чем, кстати, Git понятия не имеет.
В принципе, вы можете вернуть свой репозиторий в любое состояние, которое у него было ранее, потому что Git не будет явно удалять какие-либо объекты, он будет только время от времени собирать мусор без ссылок (висячие) объекты.Итак, вам просто нужно выяснить, как выглядел ваш репозиторий. gitk
или git log
могу помочь вам в этом.
После того как вы восстановили свой локальный репозиторий до состояния, которое вам нравится, вы можете просто поместить его обратно в свой центральный общедоступный репозиторий.Если это приводит к отправке без быстрой перемотки вперед, вам может потребоваться указать --force
отмечайте при нажатии.