Создайте ветвь git и верните исходное состояние в исходное состояние

StackOverflow https://stackoverflow.com/questions/772846

  •  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 отмечайте при нажатии.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top