Ответы пользователя по тегу Git
  • Как откатиться к предыдущему состоянию проекта и выгрузить эту ветку в репозиторий?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Расшифруйте свою фразу
    Пришлось откатить последний pull с репозитория.

    Пришлось что-то сделать? Что именно вы сделали? Либо вы только собираетесь что-то сделать? Например, Pull подгрузил актуальный мастер с GitHub, в котором коллеги сделали какую-то работу и вы теперь хотите выкинуть их работу в корзину и откатить проект?

    git revert 6759221be
    Эта команда отменяет действия некоего коммита 6759221be. Обычно это самый правильный и безопасный способ отменить какие-то изменения, при работе в команде.

    git checkout 6759221be
    Этой командой мы отрываем голову и выходим из мастера в неопределённое состояние. Непонятно чего вы хотите этой командой добиться. Делать в данный момент Push бесполезно, так как вы НЕ в мастере. git push -f резонно вам говорит что локальный мастер согласован с внешним. Ведь вы ничего не меняли в мастере, а просто переключили состояние рабочего каталога на левое состояние, не совпадающее ни с какой веткой.

    Конечно можно вернуться в мастер и сделать git reset --hard 6759221be
    Но таким образом вы создадите фактически новый мастер и если его принудительно отправить на гитхаб, то всё равно
    «Кто нибудь начнет путаться, забудет что теперь надо использовать условный master2»,
    а точнее увидят что их мастеры и мастер на гитхабе это совершенно разные ветки и нужно будет каким-то образом выходить из положения. Поэтому правильней не пересоздавать ветки а добавлять revert-коммиты с отменой изменений.

    Я так и не понял, что именно вы сделали или хотите сделать.
    Есть подозрения, что откатить вы хотите не pull, а push со своим не очень удачным коммитом.

    В любом случае, если вы хотите откатить состояние, то и изменяйте текущее состояние проекта в рабочем каталоге. В переписывании истории коммитов нет никакого смысла. Нет ничего страшного в том, что неудачный коммит виден в log, главное чтобы в итоге проект получился правильный.
    Ответ написан
    Комментировать
  • Как отключить русский язык в git?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    LANG=en_EN.utf-8
    Ответ написан
    Комментировать
  • Как создать новую историю проекта с определенного коммита?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    git reset $(git commit-tree HEAD^{tree} -m "Новое начало истории")
    Ответ написан
    Комментировать
  • Можно ли создать удаленный репозиторий на GitHub?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Уже есть удобный GitHub CLI
    Ответ написан
    Комментировать
  • Как уменьшить репозиторий Git (изменить прошлые коммиты и добавить gitignore)?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Сегодня такую чистку делают буквально в один клик.
    # Вычистить каталог Media из истории проекта
    git filter-repo --path "Media/" --invert-paths
    Ответ написан
    Комментировать
  • Как игнорировать файл для локального репозитория, но не исключать из проекта?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Грохнул ее из кеша git rm -r --cached ./folder_name
    Удалил с диска саму папку

    Можно было это сделать в один шаг git rm -r "./folder_name"

    Что делаю не так?

    Забыли закоммитить факт удаления. Без этого файлы папки продолжат отслеживаться.
    А удаление из репозитория я так понимаю не входят в планы, так что не тот метод.

    добавил в .git/config строку

    Нельзя редактировать конфиг руками. Всегда используйте команду git config

    Как мне исключить папку только на одной локальной копии репы?

    Папку исключить нельзя, но временно пометить файлы в папке, чтобы Git на них не смотрел:
    git update-index --assume-unchanged "folder/*"
    Ответ написан
    Комментировать
  • Почему файл .gitignore не работает из домашнего каталога пользователя в Windows?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Станислав,
    Git это программа, портированная из Linux, поэтому тут не работает синтаксис Windows. Мы используем в путях слеши «/» вместо обратных слешей «\». И переменные окружения вызываются иначе $USERPROFILE либо можно попробовать $HOME/.gitignore
    Но я бы тут просто вписал полный путь до файла и желательно заключить путь в кавычки.
    Ответ написан
    Комментировать
  • Как перенести код из одной ветки в другую?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Гит так не работает.

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

    нашёл нужный код, вырезал из фиче-ветки-1, закоммитил;

    Этим вы сами сообщили гиту а том, что код нужно удалить, что он и выполнил при слиянии. Какие к нему претензии?

    Возможно помогло бы склеивание ветки (squash) при слиянии. Чтобы факт удаления файлов в принципе не появлялся в истории ветки.

    Я бы в таком случае разбил коммиты на более мелкие и пересобрал ветки в нужных конфигурациях. Это удобно делать в нормальных GUI-клиентах, например в SmartGit.
    Ответ написан
    Комментировать
  • Как прописать URL, чтобы открыть файл на github в браузере?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Лариса, RAW-ссылка гитхаба отдаёт правильный файл, но с типом контента text, поэтому браузер показывает его как текст, а не рендерит html.
    Но можно обойти эту проблему используя сторонние сервисы
    https://raw.githack.com/<usergithubname>/<repo>/<branch>/path/to/test.html
    Ответ написан
    Комментировать
  • Как выйти из github в git bash windows?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Отменить авторизацию легко
    echo "url=https://github.com" | git credential reject

    При следующем пуше снова попросит авторизацию.
    Ответ написан
    Комментировать
  • Почему в Bitbucket не видно pull requests?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Pull Requests не являются частью репозитория Git и не переносятся при клонировании соответственно.
    Ответ написан
    Комментировать
  • Как закомитить?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Чтобы откатить ветку используется reset, а не checkout.

    Сделав checkout вы ушли из мастера в неизвестность (detached head). Последующие коммиты будут приклеиваться в безымянную цепочку коммитов, а не в мастер. Мастер же не изменится, так как вы уже не в нём.
    Ответ написан
    Комментировать
  • Есть ли какой-нибудь плагин Sublime для отображения текущего branch of git?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Начиная с версии 3,2 поддержка Git встроена
    Ответ написан
    Комментировать
  • Git по sshfs работает медленно. Лечится?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Git заточен на работу в локальной файловой системе.
    Вам религия не позволяет нормально клонировать репозиторий к себе?
    Ответ написан
    Комментировать
  • Как в Git переименовать ветку?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    старый мастер назвать old-master и текущую ветку, переименовать в master

    git branch -M master old-master # переимоновать старый мастер
    git branch -M master # переименовать текущую ветку в master

    Но зачем всё это? old-master будет по-прежнему связан с origin\master.
    Если хочется обновить и эти связи, то используется push
    git push --set-upstream origin old-master # перенаправить на новую ветку
    git push -u --force origin master # пересоздать внешний master

    Если origin и VPS это разные места, то VPS не увидит этих ваших переименований.
    Там тоже придётся связи перенастраивать.
    Например через git pull --rebase на VPS и на компьютерах всех коллег, если вы работаете в команде.

    Снова повторю вопрос: зачем вам эти сложности?

    git remote rename - но это для переименования удаленных веток (как я понял)

    Нет, это для переименования remotes — ссылок на внешние репо.
    Ответ написан
    1 комментарий
  • Gitlab как клонировать дерево проектов?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Вы смешали тёплое с мягким. Внутри папок ветки, а внутри веток снова папки.
    Что вообще имелось в виду?

    На всякий случай попробуйте клонировать оптом вместе с подмодулями.
    git clone --recurse-submodules <GitLab>
    Ответ написан
  • Проблемы с push во внешний репозиторий, как исправить?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Шестой пункт выполняйте первым, а первый и второй вообще не делайте, они не нужны.
    Тогда всё заработает.
    Ответ написан
    Комментировать
  • Как переключить проект на свой форк в intelij idea?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    git remote set-url origin <адрес форка>
    Либо ещё лучше так
    git remote rename origin upstream
    git remote add origin <адрес форка>

    Чтобы иметь возможнось подгружать к себе обновления основного репозитория
    git fetch upstream

    Всё это можно сделать через меню IntelliJ IDEA
    Поищите пункт Manage Remotes…
    Ответ написан
    Комментировать
  • Ошибка src refspec main does not match any - гитхаб не дает запушить на main?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Нет, не на main, а из main.

    Команда git push -u origin main делает отправку локальной ветки main во внешний репозиторий origin, но ветки main не существует, о чем вам и сообщили в ошибке.

    Вам нужно либо переименовать master в main:
    git branch -M main

    Либо так и написать, что вы хотите master отправить во внешний main
    git push -u origin master:main

    Но судя по скрину, у вас репозиторий не пустой. Вы уже создали там ветку с первоначальным коммитом. Поэтому вы не сможете просто так туда сделать push, так как ваши ветки не имеют общей истории. Это РАЗНЫЕ деревья. В таких случаях можно просо пересадить локальную ветку на вершину внешней через rebase. Либо создать ПУСТОЙ репо, как вы и сделали.
    Ответ написан
    Комментировать
  • Как настроить Prettier для Git?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Откройте настройки и введите в поиск Editor: Format On Save
    Там либо отключите форматирование при сохранении, либо настройте его, чтобы форматировался не весь файл а только изменённые строки.
    62db07e93d3f8354192308.png

    Ну либо сделайте рефакторинг проекта отдельным коммитом и договоритесь в команде о соблюдении стиля в дальнейшем.

    Вы можете обеспечить единство форматирования в своей команде, создав файл конфигурации Prettier для вашего проекта. После создания такого файла и его добавления в проект вы можете быть уверены, что все члены команды используют одинаковые правила форматирования.
    Ответ написан
    Комментировать