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

    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

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

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Git Credential Manager запоминает авторизацию в профиле текущего пользователя.
    На другом компьютере никто не сможет увидеть ваш приватный репозиторий.
    Даже другой пользователь вашего компьютера не увидит секретов.
    Ответ написан
    Комментировать
  • Как перенести изменения с GitHub на сервер?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    git init
    # добавить в .gitirnore /config/db.php
    git add . # загнать остальные файлы под отслеживание
    git commit
    git remote add origin https://github.com/..........
    # на рабочем компьютере удалить db.php из репозитория
    # и никогда больше добавлять такие вещи в репо
    git pull origin master # влить изменения с компа
    # на этом этапе скорее всего вылезут конфликты
    # сможете их разрешить прямо на сервере?
    Ответ написан
    Комментировать
  • Как сменить аккаунт GitHub?

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

    Либо работать через SSH, тогда аккаунты не понадобятся в принципе.
    Ответ написан
    Комментировать