Как получить Git репозиторий нетронутым - PullRequest
0 голосов
/ 20 июня 2019

Возьмите сборочную машину с репозиторием git и проверенной веткой. Через некоторое время все изменилось, история была переписана, вещи раздавлены, собраны вишни и слиты где-то еще на машинах разработчиков и перенесены в удаленные.

Затем разработчик возвращается к машине сборки и запускает скрипт сборки, который очищает, сбрасывает, выбирает, а затем пытается получить ветку и собрать ее. К сожалению, это та же ветка, которая уже была построена на этой машине. И поскольку все изменилось, оно не может быть ускорено и вступает в стадию слияния. Но разработчик не заботится о слиянии; если бы они могли, они просто удалили репо и клонировали его снова, а затем извлекли ветку с удаленного компьютера.

Однако клонирование репо и инициализация всех подмодулей займет много времени. Итак, как мы можем им помочь? Как вы получаете свой git-репозиторий в первозданном виде, как после его клонирования?

Возможный скрипт для решения проблемы

git fetch
git clean -dfх
git submodule update --init --recursive
git reset --hard
git checkout -b $1 --track origin/$1 || echo ""
git pull  # <-- nope, would not work

Теоретически -b $1 может быть изменено на какое-то -b someuniqueid, проверяющее только "другую" ветку, и это, вероятно, сработает. Но это не идеально. Идеи?

1 Ответ

0 голосов
/ 20 июня 2019
git reset --hard

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

Теперь вы также описали ситуацию, когда "git pull" создал новую надоедливую версию слияния. На данный момент, что вы можете сделать:

git pull 
# oops, a merge created, what a mess
git reset HEAD^    # maybe need more ^'s - see below
git reset --hard 
git pull

Первая команда git reset «удалит» последний коммит - коммит слияния - без изменения любых ваших файлов, так что они будут продолжать содержать много дерьма. Так что вторая команда избавится от всей этой хрени. Затем вы можете снова «получить тягу», чтобы снова получить последнюю версию.

На самом деле вам может понадобиться сделать более одного «^» для этого ГОЛОВА ^, если ваша ветвь была впереди более чем на один от мастера. Используйте «git status», чтобы узнать, сколько ревизий у вас впереди мастера.

В любом случае, просто делайте эти команды одну за другой, пытаясь понять, что происходит, и используя правильную команду для ситуации. Трудно дать вам конкретный список команд (а приведенный выше конкретный список, вероятно, не совсем то, что вам нужно).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...