Pull to refresh

Comments 26

Используйте "-" для возврата к предыдущей ветке
И не только. Например, можно делать слияние с предыдущей веткой.
git merge -
В кои-то веки набор действительно продвинутых и небанальных советов по git-у! Спасибо!

Над этим работают. Например, вместо части применений git checkout существуют, пока что экспериментальные, git switch для смены ветки (опционально с созданием новой) и git restore для восстановления отдельных файлов в историческое состояние.

К сожалению, часто более удобные и продуманные альтернативы не получают достаточной для выживания популярности. Меркуриал по юзабилити на порядок лучше гита, по функционалу вполне сравним с гитом, но… не судьба.

Увы. Теперь кто-нибудь нашёл бы способ обернуть это безобразие во что-нибудь удобное, как язык программирования JavaScript оборачивают в TypeScript или CoffeeScript.
Наиболее простое решение — взять и закоммитить всё с комментарием WIP (распространённая аббревиатура от «Work In Progress»).

Этот подход настолько понравился нашей команд, что завели даже отдельные алиасы для git:

[alias]
  wip="!git add . && git commit -m 'WIP'"
  rewip="reset --soft HEAD^"

Очень удобно делать
git wip
git checkout <another branch>
...do something here...
git checkout -
git rewip

Спасибо за алиас rewip, я вместо него делал `cherry-pick -n`, но ваш способ проще.
еще можно изменять последний коммит через --amend

Можно, но иногда удобнее когда видны сразу все изменения.

Более «продвинутые» wip/rewip можно делать при помощи этих alias:
gunwip='git log -n 1 | grep -q -c "\-\-wip\-\-" && git reset HEAD~1'
gwip='git add -A; git rm $(git ls-files --deleted) 2> /dev/null; git commit --no-verify --no-gpg-sign -m "--wip-- [skip ci]"'


А в случае использования zsh советую глянуть на настройку Oh My Zsh и его планиг git, который содержит много интересных alias и для меня этот плагин послужил хорошей ознакомительной базой для наиболее используемых опций в командах git
Для bash есть Oh My Bash с аналогичным плагином.
Удивлён, достойная статья из ранее мне попадавшихся по подобной тебе, приятно, спасибо
Интересно. Пользуюсь Unity в связке с git-ом уже много лет, но не помню, чтобы что-то приходилось долго и муторно вычищать при переходе между ветками. Хотя бывает, что при установке каких-то плагинов требуется дополнить gitignore, хотя сомневаюсь, что какой-то из них может оставить после себя кучу временных файлов.

В нашем случае две ветки ориентированы на разные версии Unity, 2018.4 и 2019.4. Практика показала, что если попробовать переключиться с 2018 на 2019 Editor просто будет долго думать, а при переходе с 2019 на 2018 проще удалить всю папку и зачекаутить её — иначе возникает множество глюков, не всегда заметных с первого взгляда. Дешевле в плане времени загрузки просто держать их в разных папках.

Предлагаю дополнить пункт 11 установкой msys. В итоге получаем автодополнение в консоли.

Зачем устанавливать дополнительно? Родная инсталляция гита в винде и так его с собой несет, и даже создает шорткат для запуска баш консоли…
Некоторые предпочитают использовать git pull --rebase, но не всегда это возможно, например, когда вы локально смержили другую ветку из origin в master и перед пушем делаете pull (надеюсь, не надо напоминать, чем в данном случае может грозить rebase).

Сделал как раз позавчера и поздновато понял, в чём проблема :)
За что люблю git, так это за возможность всё исправить.

Ну, не всегда это проблема. Если вливаемая ветка находится в последней редакции и после мержа будет удалена, то rebase возможен и иногда приветствуется. Просто надо отчётливо представлять, что при этом произойдёт. А сформировать такое представление без практики ребейза вряд ли получится. :)

В алиасах для стэша в п.3 похоже опечатка, и вместо
git config --global alias.exclude
должно быть
git config --global alias.sapply
?

Да, была такая опечатка, к настоящему моменту уже исправлена.

Спасибо за действительно полезные советы, особенно за fast-forward pull в конфиге.
не совсем про гит, но тоже в коллекцию алиасов:

git config --global alias.ignore \
'!gi() { curl -sL https://www.toptal.com/developers/gitignore/api/$@ ;}; gi'


А потом git ignore list, git ignore node,intellij > .gitignore

И голова не болит, что туда прописать )

P.S.: статье однозначный плюс!
это да. тот проект, на который я ссылался выше, раньше назывался gitignore.io и, вероятно, базу игноров набрал именно отсюда )
Также в моей практике был случай, когда в рабочих репозиториях надо было пользоваться строго рабочей почтой, при этом в своих локальных репозиториях я продолжал пользоваться личной. Чтобы даже случайно нельзя было перепутать где что, я удалил user.name/email из глобального конфига, каждый раз указывая их заново в локальном, держа процесс под контролем.

Более удобно это делать так:


$ cat ~/.gitconfig
...
[user]
    name = Self-Perfection
    email = <Personal e-mail>
[includeIf "gitdir/i:CORPNAME/"]
    path = ~/.git_identity_mycompany

$ cat ~/.git_identity_mycompany
[user]
        email = CORPEMAIL
        name = Alexander Mescheryakov
# vim: ft=gitconfig

Как работает: если в пути к .git директории текущего репозитория есть директория с названием corpname (проверка ignore case), то инклюдится дополнительный файл, который переопределяет ранее заданные user и e-mail. Справка: https://git-scm.com/docs/git-config#_conditional_includes

Sign up to leave a comment.

Articles