Как стать автором
Обновить

Комментарии 28

Да, reset`ом частенько пользуюсь, полезно.


Наверное каждый кто только начинал работать с git следовали другими командами:


  • скопировать папку с репозиторием куда-нибудь
  • удалить исходную папку
  • git clone ...
  • вернуть изменения с помощью copy-paste

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

От глупых опечаток в коммите помогает избавиться команда "git commit --amend". А такой ресет часто полезен когда надо слить 2 или более коммитов на одной ветке в один.

А вместо экзотической "git reset --hard HEAD~1" проще использовать обычный checkout, если конечно workspace чистый... Гораздо чаще используется команда "git reset --hard HEAD" чтобы как-раз этот workspace почистить от изменений. Ну "git clean" с флажками по вкусу тоже иногда бывает нужен.

Про аменд соглашусь, но вот слить несколько коммитов в один лучше через "git rebase -i ...", а не через reset --soft. Тем более это совсем не обязательно нескольо последних коммитов.

Про то, что проще использовать обычный checkout не соглашусь. Проще запомнить, что "git reset --hard COMMIT" гарантированно приводит рабочее пространство к определенному состоянию, а запоминать разные способы уже как бы лишнее. Тем более вы не противник ресета, а просто ограничиваете область его применения.

Часто пользуюсь `rebase -i`. Он не только слить коммиты может, но и отредактировать комментарий, изменить порядок коммитов, удалить определенный коммит, squash и многое другое.

Еще одна команда, которая недооценена - `cherry-pick`.

checkout на коммит сделает "detached head", а ветку не тронет.

Что делать, если удалённая ветка оказывается удалённой?

Это была шутка про великий и могучий русский язык, серьёзно отвечать не надо.

стешить стоит и с новыми файлами

git stash --include-untracked

которые не удаляет git reset --hard

но можно удалить их

git clean -df

предварительно проверив, ничего ли лишнего не удаляем с помощью

git clean -dfn

Вроде как последняя удаляет всё, что не относится к репозиторию. Потому будьте осторожны. У нас сторонние библиотеки, которые собираются с бубном, лежат как директория в проекте (помечена как игнорируемая). И вот такая команда почистила и их. Собирал неделю потом. Приходится, когда нет никого с такой же архитектурой процессора.

Вообще-то нет. Чтобы почистились игнорируемые файлы надо еще добавить ключ -x.

Кажется, хаб PHP стоит поменять на хаб Git

Для новичков может быть полезной git push --dry-run — она позволяет эмулировать push не производя никаких действий, помогает получить уверенность в своих действиях и/или проверить все ли правильно настроено и сделано перед собственно push'ем. Если все прошло гладко, можно убрать --dry-run.

3-5 доставили.

3 – "как я в первый раз сломал git репозиторий" (hg не ломался вообще, а тут в первую же неделю). Не надо этому учить новичков. Пусть вначале разберутся с reflog... А тогда они уже сами будут знать про reset --hard.

Вообще git reset – это как во времена DOS файлы Disk Editor-ом восстанавливать... Можно восстановить, а можно всё сломать. А может оказаться, что уже и не восстановить (gc прошёл).

Отменить перебазирование

git rebase --abort

Как вообще всё это можно выучить, если постоянно этим не пользуешься?((

Не нужно учить. Нужно прочитать документацию/книгу что бы иметь общее представление о возможностях. Что бы знать что гуглить.

А вот когда они понадобятся, вот тогда уже разбираться.

Покажите мне хотя бы один gui, который может например смержить 3 ветки через octopus?

Я думаю вы даже не слышали о таком. Да и не услышите, пока продолжаете пользоваться gui.

Если вы запускаете octopus вручную на машине разработчика — у вас очень насыщенная и интересная жизнь. С такой жизнью не до GUI, конечно.

Вот видите, вы даже не поняли о чем речь. Я не про сервис для деплоя. Я про мерж-стратегию говорю, коих в гите штук 20 есть.
Собрать монорепозиторий с сохранением истории? Пожалуйста - subtree.
Удалить секреты при публикации проекта? Пожалуйста - filter-branch.
И куча всего, о чем в GUI нет даже упоминания.
Мне приходилось за 10 лет 2 раза использовать subtree merge. Но я бы и не подумал что это вообще возможно, если б не вычитал в книге. Я бы просто грохнул всю историю, копипастнув код.

На картинке octopus merge. У коммита 4 родителя.

Вот видите, вы даже не поняли о чем речь.

Пардон, не владею телепатией.


Я про мерж-стратегию говорю, коих в гите штук 20 есть.

Всё еще не подразумевает необходимость сливания многих веток на машине разработчика. Для этого есть пулл реквесты и CI.
Ну и не говоря уж о том, что Git Extensions это прекрасно делает. Из GUI.


Собрать монорепозиторий с сохранением истории? Пожалуйста — subtree.

Это определенно то, что надо знать, ага.
За 12 лет работы с гитом это мне пригодилось ровно 0 раз, хотя прочитал об этом я в рамках начального погружения в git.


Удалить секреты при публикации проекта? Пожалуйста — filter-branch.

Секреты сразу не надо хранить, это во-первых. А во-вторых — я считаю filter-branch откровенно небезопасной вещью, и совершенно правильно, что её нет в нормальных GUI.


И куча всего, о чем в GUI нет даже упоминания.

С примерами у вас, правда, не очень задалось. Но я конечно вам и так поверю — куча так куча.

Покажите мне хотя бы один gui, который может например смержить 3 ветки через octopus?
Почему бы просто не заменить такую экзотику на два последовательных слияния?

Это было выбрано лишь для наглядности.

Ключ -p для всех команд, которые его поддерживают.

p.s. Надо бы сваять бота, который бы оставлял подобные комментарии в то и дело появляющихся постах про команды git.

Опять каждый программист кому-то что-то задолжал. Какие долги навесили за последние пару недель? Каждый программист должен использовать <вот эти команды> bash, знать <вот эти команды> vim, <вот эти команды> git… Вот прям должен! Какая-то, товарищи авторы постов, у вас творческая импотенция. Очень это напоминает кликбейтные статьи на говноресурсах аля «Десять способов борьбы с похмельем» или «Как похудеть на 12 килограмм всего за четыре дня». Нижеплинтусный шлак, одним словом
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.