иногда какая-то работа была сделана, некоторые вещи совершены, некоторые нет и т. Д., Затем не работают над проектом в течение нескольких недель, другие люди продолжают работать ... когда вы затем возвращаетесь к проекту, который вы хотитеначать чистку, не выясняя, где ваш локальный код сравнивается с удаленным
Если все, что вам нужно, это обновить локальные филиалы, вы можете решить эту проблему, не стирая хранилище.,Допустим, ваш репозиторий выглядит следующим образом.
D - F [feature]
/
A - B - C [origin/master]
\
G - H [master]
Вы можете получить очень похожий вид с git log --graph --decorate --all
, хотя это будет сбоку.
Вы внесли некоторые изменения в оба master
и новая ветвь с именем feature
.У вас уже есть чистые версии удаленной работы.origin/master
отслеживает удаленную работу на удаленной ветви master
.
Это не обновляется автоматически.Вы можете обновить его и все другие удаленные ветви отслеживания с помощью git fetch -p
(-p удалит все старые удаленные ветви).
git fetch -p
D - F [feature]
/
A - B - C - I - J - K [origin/master]
\
G - H [master]
Теперь, когда ваш origin/master
обновлен, вы можете посмотретьв ней, как и в любой другой ветке, можно посмотреть последние работы.
Вы можете обновить любую другую локальную ветку с помощью последних изменений с помощью git rebase origin/master
.Это воспроизведет любые локальные изменения поверх origin/master
.Например, чтобы обновить ветку feature
...
git checkout feature
git rebase origin/master
D1 - F1 [feature]
/
A - B - C - I - J - K [origin/master]
\
G - H [master]
Или, если ветка вас больше не интересует, вы можете удалить ее.
git branch -D feature
A - B - C - I - J - K [origin/master]
\
G - H [master]
Наконецесли вы просто хотите выбросить свои изменения на master
, используйте git reset --hard
, чтобы заставить master
перейти на origin/master
.
git checkout master
git reset --hard origin/master
D1 - F1 [feature]
/
A - B - C - I - J - K [origin/master]
[master]
И теперь вы в курсе.
Чтобы ответить на вопрос о стирании репозитория ...
Репозитории Git, как правило, очень малы (если их нет, это вызовет другие проблемы).Предполагая, что у вас есть приличное сетевое соединение, самое простое, чтобы гарантировать действительно чистый сброс, это клонировать его снова.
Если это невозможно, следующим лучшим вариантом будет , следуя этим инструкциям .Но выход из пробки путем клонирования нового хранилища - плохая привычка.Практикуйтесь в озеленении своего хранилища.
клонируйте свой существующий клон и очистите его локальные ветви и теги.Это гарантирует, что такие вещи, как .git/hooks
и .git/config
будут сброшены.
Сначала клонируйте локальное грязное хранилище.
git clone /path/to/the/dirty/repo /path/to/the/new/new_repo
cd /path/to/the/new/new_repo
Затем удалите все локальные ветви и теги.
Git не позволит вам удалить текущую ветку, поэтому проверьте origin/master
, исходную версию master
.
git checkout origin/master
Получите все ваши локальные ветви и удалите их.
git for-each-ref --format '%(refname:short)' refs/heads
Получите все ваши локальные теги и удалите их.
git for-each-ref --format '%(refname:short)' refs/tags | xargs git tag -d
Создайте новый локальный master
из origin/master
и проверьте его.
git checkout -b master origin/master
Установите свойПроисхождение должно быть исходным хранилищем.Вы можете получить это из git remote -v
в грязном хранилище.
git remote set-url origin <original origin url>
Наконец, выполните git pull
, чтобы получить последнюю версию восходящего хранилища, его веток и обновить master
.
git pull
Как видите, проще разложить существующий клон в саду.