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

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    При клонировании в рабочий каталог распаковывается не ветка master, а текущая ветка.
    Единственный способ изменить это поведение – при клонировании указать какая конкретно ветка вам нужна.
    git clone --branch <branchname> <remote-repo-url>
    Либо вообще ничего не распаковывать сразу. Распаковывать можно позже.
    git clone --no-checkout <remote-repo-url>
    Ответ написан
    Комментировать
  • Как отключить vim при использовании гита?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Если ничего не получается, прочтите наконец инструкцию
    git config --global core.editor "ваш любимый редактор"
    Ответ написан
    Комментировать
  • Как сейчас работают с Git?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Консольные команды вы обязаны знать и понимать что они делают, это не обсуждается. Но пользоваться лучше тем инструментом, который есть под рукой. Если среда разработки включает поддержку контроля версий, то нужно пользоваться. Это здорово ускоряет работу и позволяет визуализировать процессы. Глупо строчить команды в терминал, когда IDE позволяет то же самое сделать одним кликом мыши или вообще автоматически. Также вы не сможете одной только консолью так качественно разрешать конфликты слияния, как это позволяет тот же JetBrains. Из автономных графических клиентов безусловный лидер – SmartGit, сложные rebase делаю только в нём. Но некоторые вещи всё равно без консоли никак не сделать.
    Ответ написан
    Комментировать
  • Как отменить push?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Файлы никак не могли удалиться в результате push. Вы сделали что-то ещё, что привело к этому результату. В вопросе нет никаких подробностей, так что ответа не будет.
    Ответ написан
    Комментировать
  • Как восстановить ветки на github?

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

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

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

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Эта ошибка говорит, что у вас в репозитории нет ветки master.
    Возможно вы не создали файл README.md и соответственно нечего коммитить.
    Ответ написан
    Комментировать
  • Как загрузить готовый проект в пустой репозиторий?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Нельзя отправить несуществующую ветку.
    Создайте как минимум один коммит в ветке master, перед тем как отправлять её.
    Ответ написан
    Комментировать
  • Как исправить ошибку "src refspec master does not match any"?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Нет ветки master, вот и ругается. Ветка по умолчанию на GitHub теперь называется main.

    Команда git branch -vv покажет какие ветки есть локально и с какими внешними ветками связаны.
    * main 0e02250 [origin/main] v.01

    Надо было делать git push origin main
    Либо просто git push т. е. отправить текущую ветку в связанную с ней ветку на внешнем репозитории.
    В нашем случае текущая ветка main (помеченная звёздочкой)
    отслеживает исходную ветку main в репозитории обозначенном как origin

    Что скрывается за сокращением origin покажет команда git remote -v
    origin	https://github.com/xxx/xxx.git (fetch)
    origin	https://github.com/xxx/xxx.git (push)
    Ответ написан
    Комментировать
  • Как восстановить некоторые файлы из предыдущего коммита (3 коммита назад) в phpStorm?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    git restore HEAD~3 -- file
    Либо в IDE вызвать историю файла
    6279b0934fc80365411803.png
    И в окне истории сделать Get на нужном коммите
    6279b0db7eb60668241937.png
    Ответ написан
    Комментировать
  • Как уменьшить размер репозитория?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Пакет filter-branch сейчас заявлен устаревшим и не рекомендуется к использованию.
    Пользуйтесь filter-repo – он быстрее и безопаснее.
    Ответ написан
    Комментировать
  • Почему не работает команда git add?

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

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Изменения в папке сами в индекс не попадут, если вы этого не попросите.
    А чтобы файлы в папке не мозолили глаза в списке изменений, временно заигнорьте их
    git update-index --assume-unchanged node_modules/*
    и добавьте саму папку в файл игнора тоже, чтобы новые файлы не видеть.
    Ответ написан
    Комментировать
  • Доработка в pull request другим разработчиком?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Вы всё правильно описали, так и делается.
    git fetch # подгружаем актуальные ветки
    git checkout -b feature origin/feature # распаковываем ветку
    # дорабатываем
    git push # обновляем чужой PR
    Ответ написан
    Комментировать
  • Как обеспечить безопасность приватного репозитория на GitHub?

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

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Не надо удалять коммиты, достаточно отменить изменения, сделанные коммитом.
    git revert HEAD
    Ответ написан
    Комментировать
  • Как сменить исполнителя коммита в pycharm?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    В самом PyCharm вы такой настройки не найдёте. Имя и мыло хранятся в конфигах гита, которые находятся как минимум в трёх местах на диске компьютера. PyCharm достаточно умён, чтобы увидеть, что вы ещё не настроили свой системный Git и выводит красивый диалог для ввода недостающих данных.
    Но для редактирования извольте уже открыть терминал и ввести команды
    git config --global user.name "John Smith"
    git config --global user.email john@smith.com


    Подправить подписи старых коммитов позволит команда
    git filter-repo --mailmap my-mailmap
    Ответ написан
    Комментировать
  • Как найти все старые комиты с файлом, добавленным в .gitignore?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Посмотреть в каких коммитах был добавлен или удалён конкретный файл.
    git log --oneline --name-status -- '*ignored.txt'
    Ответ написан
    Комментировать
  • Как запушить все коммиты?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Невозможно "пушить коммиты"! Пушится только целиком вся локальная ветка в какую-то конкретную внешнюю ветку.

    Вашу проблему видно тут
    Оказывается, последние коммиты вылетели из ветки master, т.е. вот что пишут логи Version Control:
    для первого коммита - In 3 branches: HEAD, master, origin/master
    для большинства коммитов проекта - In 2 branches: HEAD, master
    для последних - In 1 branch: HEAD.

    Вы видимо ВЫШЛИ из текущей ветки и сделали checkout на произвольном коммите. Это называется состояние detached HEAD, т. е. когда на коммит указывает только HEAD. Если в таком состоянии начать создавать коммиты, то получится НОВАЯ цепочка коммитов, которая не принадлежит никакой именованной ветке. Так вы и сделали, судя по тому, что ваша IDE говорит что эти коммиты видны только в HEAD.

    Как это исправить? Ответ зависит от того, что вы хотели добиться, переключившись на старое состояние проекта. Если нужно было просто отбросить более свежие правки, то надо было изначально делать reset, а не checkout. А сейчас просто сделайте так, чтобы ваша ветка указывала на текущий коммит.
    Пересоздайте её локально и во внешнем репозитории.
    git branch -f master
    git push -f
    Ответ написан
    Комментировать
  • Как сделать все отслеживаемые файлы неотслеживаемыми гит?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    623b590faa3f0756067289.png
    либо в терминале git reset HEAD
    Файлы не изменятся, но отменится их индексация, т. е. сделается unstage

    Либо просто нажать кнопочку отмены — Rollback
    623b5a5a4d121830780308.png
    Ответ написан
    Комментировать
  • Как переключиться на новую версию Git в macOS?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Не пытайтесь как-то удалить или переименовать Git от Apple. Он защищён системой.
    Правильный путь это проверить переменную PATH, чтобы папка с нашим гитом была раньше чем системная. Сами системные пути хранятся в файле /etc/paths
    Легче поправить первоисточник, чем копаться в профиле bash, который может и не используется даже. В macOS давно zsh в качестве оболочки.

    Итак, запустите любимый редактор от имени root и откройте файл.
    Например так sudo nano /etc/path
    В Monterey он выглядит так
    /usr/local/bin
    /usr/bin
    /bin
    /usr/sbin
    /sbin
    Homebrew добавляет ссылку на Git в папку /usr/local/bin поэтому сразу работает нормальный Git. В Catalina приходилось редактировать порядок каталогов.
    Ответ написан
    Комментировать