Ответы пользователя по тегу GitHub
  • Почему невозможно вводить символы в поле для пароля?

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

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Мусорный файл нужно удалить из всех коммитов в которых он есть, а не просто из актуального состояния проекта.
    • Если файл добавлен в последнем коммите, то просто поправьте этот коммит через команду commit --amend
    git rm --cached "r0_code/trainee/Java_Полное_руководство_Герберт_Шилдт,_10_е_издание.pdf"
    git commit --amend

    • Если файл добавлен в старом коммите, то можно поправить этот коммит через команду rebase --interactive
    Как пользоваться командой смотрим в инструкциях к гиту.
    Примерно так
    При запуске команды git rebase --interactive <коммит>
    откроется текстовый редактор с планом пересборки ветки.
    • Мы заменяем команду pick на edit в первой строке. Сохраняем и выходим редактора.
    • Репозиторий переключается на состояние, когда мы только что добавили ненужный файл в репозиторий.
    Значит мы можем просто удалить файл способом, который я указал в выше — правим текущий коммит через --amend
    • Затем командой git rebase --continue продолжим пересборку, чтобы гит повторил все последующие коммиты


    • Самый простой и надёжный способ вычистить репозиторий от файла — использовать скрипт filter-repo
    git filter-repo --invert-paths --force --path "r0_code/trainee/Java_Полное_руководство_Герберт_Шилдт,_10_е_издание.pdf"

    Последний вариант полностью автоматизирован и удалит файл сразу из всех веток.
    Ответ написан
    Комментировать
  • Как настроить отслеживание изменений файлов репозитория GitHub в VSCode?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Какой-то плагин всё сломал. Помогает выключение и включение плагинов для 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, главное чтобы в итоге проект получился правильный.
    Ответ написан
    Комментировать
  • Можно ли создать удаленный репозиторий на GitHub?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Уже есть удобный GitHub CLI
    Ответ написан
    Комментировать
  • Как прописать 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

    При следующем пуше снова попросит авторизацию.
    Ответ написан
    Комментировать
  • Почему гитхаб не дает пушить на 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. Либо создать ПУСТОЙ репо, как вы и сделали.
    Ответ написан
    Комментировать
  • Как «вытащить» папку из Git репозитория в отдельный репозиторий?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Задача решается легко
    # Клонируем репо в две папки рядом с каталогом project
    git clone --no-local . "../new_front" # тут будет фронт
    git clone --no-local . "../new_back" # тут будет бэкенд
    cd ../new_back # перейдем в новый бэкенд 
    # Вычистим каталог front из истории бэкенда
    git filter-repo --path "front/" --invert-paths 
    cd ../new_front # перейдем в новый фронт
    # Оставим в проекте фронта только содержимое подкаталога front, 
    # сделав его новым корнем проекта
    git filter-repo --subdirectory-filter "front/"

    Пакет git-filter-repo возможно придётся установить. Он не входит в базовое ядро Git.
    Ответ написан
    Комментировать
  • Как сделать клонирование файлов с репозитория GitHub в новый проект?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Комментировать
  • Как отменить несколько коммитов в форкнутом репозитории?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Репозиторий уже содержит ВСЕ версии проекта. Не совсем понятно что именно вам нужно.
    Если хочется актуальный main откатить на 5 коммитов назад, то клонируйте форк к себе на компьютер, затем откатите нужную ветку назад через git reset --hard HEAD~5 и отправьте обратно git push --force
    Ответ написан
    Комментировать
  • Как из гита навсегда удалить файл?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Самый надёжный способ вычистить репозиторий от файла — использовать скрипт filter-repo
    # клонируем репозиторий в соседний каталог
    # иначе придётся использовать ключ --force
    git clone --no-local . ../clonerepo/
    # переходим в свежий клон
    cd ../clonerepo
    # чистим
    git filter-repo --path "path/to/file" --invert-paths
    # проверим что файл исчез
    git log --all --oneline --name-status -- "path/to/file"
    Ответ написан
    Комментировать
  • Не получается запушить в репозиторий. Почему зависает на writings objects?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Добавили большой файл, закоммитили, затем удалили этот файл и снова закоммитили
    ➜ git log  --oneline              
    0aa4c37 (HEAD) Delete bigfile
    65211de Add bigfile
    591a997 Initial commit

    Хотим склеить эти два коммита в один.
    ➜ git rebase -i HEAD~2
    Откроется редактор со сценарием
    pick 65211de Add bigfile
    pick 0aa4c37 Delete bigfile

    Меняем его на такой
    pick 65211de Add bigfile
    squash 0aa4c37 Delete bigfile

    Сохраняем, выходим и получим.
    Successfully rebased and updated refs/heads/main.
    Теперь большого файла нет и он не помешает сделать push
    Ответ написан
    Комментировать
  • Возможно ли изменить message коммита?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Изменить нельзя, но можно пересоздать коммит, в том числе с новым сообщением.
    Последний коммит ветки через git commit --amend
    Более ранние через git rebase --interactive
    Ответ написан
    Комментировать
  • Как клонировать репозиторий поменяв автора?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    1. Клонировать себе на комп git clone
    2. Поменять автора коммитов используя git filter-repo
    3. Отправить в новый пустой репозиторий git push -all <URL_нового_репо>


    git filter-branch заявлен устаревшим и небезопасным
    Ответ написан
    Комментировать
  • Как удалить файлы из pull request?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Если отменить изменения файла и закоммитить, то он исчезнет из PR
    git restore <FILE> origin/target_branch
    Ответ написан
    Комментировать
  • Как синхронизировать локальные файлы с удалённым репозиторием?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Если вы будете использовать URL репозитория для ssh протокола, то вам необходимо сначала создать пару ключей и прописать открытый ключ в вашем аккаунте гитхаба. И проверить, чтобы в репозитории был открыт доступ для вашего аккаунта.

    Но проще использовать ссылку https, чтобы не возиться с ключами.

    git init # инициализировать репозиторий в папке тестового проекта
    git remote add origin <URL> # указать адрес вышестоящего репозитория
    git fetch # скачать вышестоящий репозиторий
    git reset origin/master # установить указатель на ветку master
    # существующие локальные файлы в рабочем каталоге измениться не должны
    git branch --set-upstream-to=origin/master master 
    # связать master с origin/master


    Вы делаете почти правильно
    git fetch origin
    -- ошибок не выводит, но и результата никакого не даёт

    Потому что вы ранее уже сделали pull, который включает в себя fetch
    Если ничего не выводит, значит ошибок нет и изменений в origin тоже нет.

    fatal: 'origin/master' does not appear to be a git repository

    Гит говорит, что origin/master не является корректным адресом репозитория.
    Правильный синтаксис: git pull origin master

    И не называйте пожалуйста GitHub гитом.
    Ответ написан
    Комментировать
  • В удаленный репозиторий на гитхабе добавляются не файлы из локального репозитория, а вся папка с репозитрием?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Репозиторий нужно создавать ВНУТРИ каталога с проектом, а не в корне профиля пользователя.

    вместо нормальной структуры папок в удаленном репозитории: proj/файлы проекта

    Это вовсе не нормальная структура. Сама папка proj не должна отображаться в проекте.
    Ответ написан
    Комментировать
  • Не могу сделать git push heroku master, что делать?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Если
    неверно ввел логин и пароль

    Удалить ошибочную авторизацию можно командой
    echo "url=https://github.com" | git credential reject
    Ответ написан
    Комментировать
  • Как восстановить ветки на github?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Написано же merged. Значит как все коммиты ветки зафиксированы в репозитории.
    Переключись на нужный коммит и создай на нём ветку.

    Если удалил ещё не слитую ветку, то восстанови через git reflog

    Все операции делаются локально на рабочем компьютере.
    Ответ написан
    Комментировать