Задать вопрос
  • Безопасно ли удалить pull request?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Удалить Pull Request невозможно, разве только закрыть его, да и не нужно ничего удалять для доработки задачи! Просто вернитесь в свою тематическую ветку. Добавьте новые коммиты с исправлениями и отправьте их на гитхаб. Pull Request обновится автоматически.

    Даже если вы закрыли пиар, но продолжили работать в той же ветке, то последующий пуш просто заново откроет этот же пиар.

    Аналогично если на Code Review будут замечания, то вы их просто исправляете локально в той же тематической ветке и пушите. Доработки сразу попадут в Pull Request.
    Ответ написан
    Комментировать
  • Как безболезненно перейти на новый контроллер домена?

    sergey-kuznetsov
    @sergey-kuznetsov
    Автоматизатор
    А что за проблемы с внешним доменом? Мне кажется наоборот удобно так.

    Ранее тут советовали утилиту по переносу учётки пользователя из домена в домен без потери настроек и файлов профиля. User Profile Wizard https://www.forensit.com/domain-migration.html
    Ответ написан
    5 комментариев
  • Появляется ошибка при вводе git push -u Error: failed to push some refs to...?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Вас унесло совсем не в ту степь. Изначальная проблема думаю в том, что у вас нет прав на запись в свой репозиторий — Remote rejected. При первом пуше обычно просит авторизоваться. Это было сделано?

    Создавать на гитхабе пустую ветку с таким же именем точно не было смысла, удалите её, иначе она будет мешать отправить вашу реальную локальную ветку.

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

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    git reset --hard 0821842 # откатить локально 
    git push --force # откатить на внешнем, это удалит и создаст заново ветку

    Master обычно имеет защиту от удаления, тогда можно поступить более правильно:
    # создать синтетический коммит, отменяющий последние коммиты
    git merge --ff $(git commit-tree -p master -m "Rollback to commit 0821842" 0821842^{tree})
    git push
    # можно ещё для надёжности проверить, что новое состояние действительно совпадает с желаемым
    git diff master 0821842
    Ответ написан
    8 комментариев
  • Как разрулить конфликт из командной строки?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    #отменить неудачное слияние
    git merge --abort
    # повторить слияние используя опцию theirs
    git merge -Xtheirs branch_b 
    # при конфликтах выберется вариант из вливаемой ветки

    Но это не точно. Я вечно путаю ours и theirs )) Советую почитать в нашей книжке про типы слияний

    По умолчанию, когда Git при слиянии веток замечает конфликт, он добавляет в код маркеры конфликта, отмечает файл как конфликтующий и позволяет вам разрешить его. Если же вместо ручного разрешения конфликта вы хотите, чтобы Git просто использовал какую-то определённую версию файла, а другую игнорировал, то вы можете передать команде merge одну из двух опций -Xours или -Xtheirs.

    В этом случае Git не будет добавлять маркеры конфликта. Все неконфликтующие изменения он сольёт, а для конфликтующих он целиком возьмёт ту версию, которую вы указали (это относится и к бинарным файлам).


    возиться с уголками лень

    Всем лень. Поэтому используют merge tools которые помогают разбираться с «уголками» в один клик.

    conflict-solver--base-changes-03906ff6.png

    Либо сразу во всём файле выбрать какой-то один вариант и разрешить конфликты в пользу одной стороны.
    resolve-dialog.png

    Если хочется сделать это именно из командной строки, то делается это так.
    git checkout branch_b -- имя_файла # оставить версию файла из ветки branch_b
    git add имя_файла # сбросить состояние конфликта
    # ... разрешить другие конфликты
    git merge --continue --no-edit # создать коммит слияния
    Ответ написан
  • Как исправить "unable to merge unrelated histories"?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега GitHub
    Автоматизатор
    Причина озвучена в сообщении. Вы пытаетесь «смёржить» ветки, которые не имеют общей истории. Зачем?
    Решений могу предложить несколько.
    1. Вместо merge используйте команду rebase. Это пересоберёт вливаемую ветку поверх базовой.
    2. У команды merge есть опция для игнорирования этой ошибки: --allow-unrelated-histories
    Последний вариант используют когда объединяются истории двух проектов, которые начали свою жизнь независимо друг от друга.
    Ответ написан
    Комментировать
  • Как открыть вторую гит ветку в новом окне?

    sergey-kuznetsov
    @sergey-kuznetsov
    Автоматизатор
    IDE открывает не ветку, а копию её определённого состояния распакованную в рабочий каталог.
    Очевидно, что в один каталог вы не можете распаковать сразу две версии чтобы редактировать их в разных окнах.

    Но гит позволяет иметь несколько рабочих каталогов для одного репозитория, без клонирования самого репозитория. Не уверен, поддерживает ли JetBrains такой режим работы, это не совсем стандартное использование Git.
    Почитайте про multiple working trees
    Ответ написан
    Комментировать
  • В терминале Git Bash вылазит какой-то END и другое. Как убрать?

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

    j перейти на одну строку вниз
    k переместиться на одну строку вверх
    space перейти на одну страницу вниз
    b перейти на одну страницу вверх
    h показать помощь
    / поиск вперёд
    ? поиск назад

    Если вы не хотите less, просто замените его другим пейджером в конфигурации. Если вам вообще не нужен пейджер, просто используйте cat:

    git config --global --add core.pager cat
    Ответ написан
    4 комментария
  • Как проверить ветку на актуальность с удаленным репозиторием?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    git fetch # предварительно скачать обновления
    git branch -vv #  показать список локальных веток 
    # в скобках покажет с какими вышестоящими ветками они связаны
    # если вышестоящая ветка удалена, то будет пометка gone
    git switch ветка # выборочно переключиться на ветку
    git status # посмотреть отставание от вышестоящей
    Ответ написан
    Комментировать
  • Как изменить имя компьютера показываемое в терминале?

    sergey-kuznetsov
    @sergey-kuznetsov
    Автоматизатор
    sudo scutil --set HostName mac
    Этого достаточно. Переустанавливать систему из-за такого пустяка точно не нужно ))
    После перезапуска терминала получим ruslan@mac ~ %
    Ответ написан
    4 комментария
  • Как правильно добавить в git-репозиторий папку выше по каталогу?

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

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

    Исходная структура папок
    public_html
    └── wp-content
        ├── plugins
        │   └── my_plugin
        └── themes
            └── child-theme
                └── .git

    Подготовим старый репозиторий к перемещению
    git filter-repo --to-subdirectory-filter wp-content/themes/child-theme

    Получим такую структуру
    public_html
    └── wp-content
        ├── plugins
        │   └── my_plugin
        └── themes
            └── child-theme
                ├── .git
                └── wp-content
                    └── themes
                        └── child-theme


    Затем перенесём папку .git и всё остальное содержимое папки child-theme в корень сайта.
    Ответ написан
    Комментировать
  • Как изменить имя группы пользователя, которая отображается в терминале Mac OS?

    sergey-kuznetsov
    @sergey-kuznetsov
    Автоматизатор
    Это не имя группы, а название компьютера. Выполните команду:
    sudo scutil --set HostName MBP
    В новых окнах терминала будет уже новое имя.
    Ответ написан
  • Как отменить два последних комита без потери локальных изменений?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Очень просто. Вот один из способов.
    git reset --soft HEAD~2 # отменить два последних коммита
    # с опцией --soft состояние проекта в рабочем каталоге не изменится и ничего не потеряешь
    # и все локальные изменения после первого коммита автоматически поместятся в индекс
    git commit # создать коммит заново.


    В следующий раз вместо того, чтобы создавать дополнительный исправляющий коммит, просто пересоздавай предыдущий «плохой» коммит с помощью команды git commit --amend
    Ответ написан
    2 комментария
  • Ошибка при обновлении Android Studio. Как победить?

    sergey-kuznetsov
    @sergey-kuznetsov
    Автоматизатор
    Попробуй обновиться используя JetBrains Toolbox для Android Studio.
    И вообще этот инструмент сильно облегчает жизнь.
    Ответ написан
    1 комментарий
  • Как сбросить пуши гит в Android Studio?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Делай осмысленные сообщения коммитов. Эти шифровки с датами тебя только запутают.

    Сам факт, что при push ты видишь много коммитов, не является ошибкой. Не надо пытаться это исправить.
    Это лишь признак того, что твоя ветка не основана на актуальном мастере изначально и в процессе работы подгружались обновления, либо ты баловался c push --force что равносильно пересборке ветки заново через rebase.
    После такого принудительного push, на других компах уже недостаточно обычного pull. Придётся сделать pull в режиме --rebase, иначе получится каша из коммитов.

    Советую для работы с самим репозиторием параллельно использовать нормальный Git-клиент, который наглядно показывает дерево коммитов. SmartGit идеален для этого. Так будет намного понятнее что происходит.
    Ответ написан
  • Самый простой бесплатный способ включить NTFS HDD на MacOS?

    sergey-kuznetsov
    @sergey-kuznetsov
    Автоматизатор
    macFUSE не имеет собственного драйвера NTFS а предлагает подгрузить NTFS-3G, который глючный и тормозной.

    Мне нравятся дрова от Paragon которые ставятся бесплатно в пробном режиме.

    А с небольшим хаком триал можно сделать вечным.
    1. Ставим 2027 год в настройках MacOS.
    2. Устанавливаем, запускаем Парагон, берем триал 10 дней и не перезагружаемся.
    3. Отключаем Парагон, закрываем его. Возвращаем год в сегодняшний.
    4. Перезагрузка.
    5. Триал теперь вечный.
    Ответ написан
    3 комментария
  • Сервер с ESXI 6 не видит более 20 USB флешек, в чем проблема?

    sergey-kuznetsov
    @sergey-kuznetsov
    Автоматизатор
    Это ограничение самого хоста ESXi
    You can add up to 20 USB devices to a virtual machine, which is the maximum number of devices supported for a simultaneous connection to one virtual machine. The maximum number of USB devices supported on a single ESXi host for a simultaneous connection to one or more virtual machines is also 20.
    Ответ написан
    6 комментариев
  • Почему не удается запушить на Bitbucket?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Поправь ошибку в URL
    git remote set-url origin git@bitbucket.org:myacc/myproj.git

    Сообщение Permission denied сбивает с толку. Git при любой проблеме с передачей данных пишет Permission denied, хотя ошибка не в правах доступа, а в том, что Git просто не нашел репозиторий по указанному адресу. ...does not appear to be a git repository
    Ответ написан
    Комментировать
  • Как посмотреть адрес репозитория на bitbucket?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Коммитить можно только в локальный репозиторий, а во внешний репозиторий мы пушим.
    Ссылки на внешние репозитории показываются командой git remote -v
    Если в VSCode, то открой панель Source Control и выбери раздел Remotes. Там всё увидишь.
    Ответ написан
    Комментировать