Задать вопрос
Ответы пользователя по тегу Git
  • Как восстановить некоторые файлы из предыдущего коммита (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 приходилось редактировать порядок каталогов.
    Ответ написан
    Комментировать
  • При выполнении команды checkout выводит ошибку, что не так?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Если вы хотите вернуть файлы в то состояние, в котором они были в момент последней индексации, то выполните вот такую команду
    git restore :/

    Фраза You are on a branch yet to be born означает буквально то, что репозиторий совершенно пустой. Вы не сделали ещё ни одного коммита и нет ни одной ветки, поэтому команда checkout бессмысленна. Надо было после индексации git add . сразу всё и закоммитить первым делом.
    Ответ написан
    Комментировать
  • Как изменить родительскую ветку?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    git rebase --onto main $(git merge-base develop ficha) ficha
    Ответ написан
    Комментировать
  • Как поднять репо на уровень выше в каталоге?

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

    Правильней будет перед перемещением папки .git воспользоваться командой filter-repo, чтобы пересобрать заново все предыдущие коммиты так, как будто репозиторий изначально лежал в на два уровня выше.

    Исходная структура папок
    mysite
    └── application
        ├── backend
        └── frontend
            └── .git

    Подготовим старый репозиторий к перемещению
    git filter-repo --to-subdirectory-filter application/frontend

    Получим такую структуру
    mysite
    └── application
        ├── backend
        └── frontend
            ├── .git
            └── application
                └── frontend


    Затем перенесём всё содержимое папки frontend в корень сайта.
    И никаких дополнительных коммитов не понадобилось. Разве что останется только добавить в репозиторий остальной сайт.
    Ответ написан
    Комментировать
  • Как мне сделать так чтобы в папке проекта все файлы стали опять такие как были на момент последнего коммита?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Способов много
    git checkout .
    git restore .
    git reset --hard

    даже git stash даст желаемое как побочный эффект

    Но все эти команды откатят только измененные файлы. Новые файлы не тронут.
    Для чистки от добавленных файлов используют git clean -d -f
    Ответ написан
    Комментировать
  • Как перенести изменения с 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, тогда аккаунты не понадобятся в принципе.
    Ответ написан
    Комментировать
  • Как отменить добавление файлов, которые появились при pull?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Отменить pull можно так
    git reset --merge ORIG_HEAD
    Это делается сразу после pull
    Ответ написан
    Комментировать
  • Как перестать отслеживать папку?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    а можно ли сделать так, чтобы при git clone папка /vendor на локалку сливалась, после чего убедить git перестать ее отслеживать?

    Можно. Разрешаю ))
    после клонирования удали папку из репозитория
    git rm -r --cached -- 'vendor/*'
    git commit

    Если папка упомянута в gitignore, то перестанет отслеживаться в рабочем каталоге.
    Но удалится в origin/
    Ответ написан
    Комментировать