Ответы пользователя по тегу GitLab
  • Как очистить ветку Master или создать новую для работы с новым проектом?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Удалите папку .git — это репозиторий с вашей веткой master в том числе.
    Удалите другие ненужные файлы в рабочем каталоге.
    Начните новый проект обычным способом.
    Ответ написан
    Комментировать
  • Как почистить Git-репозиторий?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Вот несколько фактов, которые помогут понять как работает Git.
    • Файл .gitignore действует только на ещё не отслеживаемые файлы.
    • Файл .gitignore предназначен для описания того, что мы не хотим СЛУЧАЙНО добавить в репозиторий. Либо не хотим случайно удалить переключив ветку.
    • Мы можем ПРИНУДИТЕЛЬНО добавить в репозиторий ЛЮБОЙ файл, даже если он описан в .gitignore.
    • Добавление файла в .gitignore не удалит сам файл из репозитория. Если файл УЖЕ в репозитории, то он продолжит отслеживаться, независимо от наличия .gitignore.
    • Если больше не хотим отслеживать какой-то файл, то просто удаляем его из репозитория. Ключ --cached позволит оставить файл в рабочем каталоге текущего репозитория если он нужен.
    git rm --cached -- '.DS_Store'
    git commit

    Но последний рецепт сработает только на одном компьютере. Если коллеги переключатся на этот коммит, то файл удалится у них из рабочего каталога.
    Ответ написан
    4 комментария
  • Как удалить изминения из gitlab?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Отменить изменения = внести изменения, противоположные этому.
    Например через git revert <хеш>
    Ответ написан
    Комментировать
  • Как переключить удаленный репозиторий на более ранний коммит?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    git reset --hard 0821842 # откатить локально 
    git push --force # откатить на внешнем, это удалит и создаст заново ветку

    Master обычно имеет защиту от удаления, тогда можно поступить более правильно:
    # создать синтетический коммит, отменяющий последние коммиты
    git merge --ff $(git commit-tree -p master -m "Rollback to commit 0821842" 0821842^{tree})
    git push
    # можно ещё для надёжности проверить, что новое состояние действительно совпадает с желаемым
    git diff master 0821842
    Ответ написан
    8 комментариев
  • Как проверить ветку на актуальность с удаленным репозиторием?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    git fetch # предварительно скачать обновления
    git branch -vv #  показать список локальных веток 
    # в скобках покажет с какими вышестоящими ветками они связаны
    # если вышестоящая ветка удалена, то будет пометка gone
    git switch ветка # выборочно переключиться на ветку
    git status # посмотреть отставание от вышестоящей
    Ответ написан
    Комментировать
  • Как синхронизировать проект с удалённым репозиторием?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Ох уж эти трудности перевода)) remote обычно переводят на русский как удалённый. Но что если я захочу удалить remote? Удалить удалённый?
    Поэтому лучше говорить «внешний», чтобы не путаться. Мы работаем с локальным репозиторием, а все остальные по отношению к нему будут внешними. В Git нет централизации, все репозитории равноправны и могут обмениваться информацией в произвольных направлениях.

    Итак: у нас есть два внешних репозитория и хочется их синхронизировать? Без проблем.
    Можно использовать локальный компьютер как вспомогательный.

    Я сделал
    git init
    git remote add origin ....


    Начало уже нелогичное. Ты же говоришь что уже выкачал репозиторий с сервера?
    Т. е. выполнил git clone <server1>
    Это уже создало копию репозитория и init не нужен. А ещё это автоматически создало ссылку origin тоже.

    Дальше можно поменять адрес origin на второй сервер
    git remote set-url origin <server2>

    И сразу увидим в git status есть ли отличия.
    Хотя нет, вру. Надо после смены адреса скачать к себе заново внешние ветки командой
    git fetch
    Только тогда будет что сравнивать.

    Примерно так. Это первое что пришло в голову и пожалуй грубовато. Можно придумать более аккуратную схему.

    Я бы лучше не удалял старый remote, а добавил новый. То что ты «скачал с сервера» пусть так и останется как origin. А «удалённый» репозиторий обозначим как upstream
    git remote add upstream <server2>
    git fetch upstream

    Тогда мы сможем сравнивать любые ветки и синхронизировать.
    Ответ написан
    Комментировать
  • Как удалить или засинхронизировать HEAD и удалённую ветку на GitLab?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Желтая бирка означает что ты сейчас не находишься ни в какой ветке (состояние отсоединенного указателя HEAD). Что ты собрался запушить? Ветка же нужна, которую пушить. HEAD это не ветка, это просто указатель на текущее состояние. Вот хороший мультик, который поможет тебе понять что происходит.

    Тебе надо установить указатель твоей ветки на текущий коммит, на который указывает HEAD
    git checkout -B имя_твоей_ветки HEAD
    Тут важен регистр опции -B, так как ветка с таким именем уже где-то существует и мы принудительно пересоздаём её на новом месте. А находясь в ветке, мы уже сможем её запушить.
    Ответ написан
    Комментировать