1. Переименовываем локальную ветку
Если вы сделали опечатку, когда вводили имя ветки, вам поможет вот такая команда.
// Примечание: опустите символы < и >, а слова разделите дефисом (-)
git branch -m <new_name>
eg:- git branch -m new-new-branch
2. Изменяем upstream-ветку
Эта команда позволяет отправить локальную ветвь в новую удаленную ветку.
git push origin -u <new_name>
3. Приводим локальную ветку в соответствие с удаленной
Иногда внесешь массу изменений в локальную ветку, а в итоге понимаешь, что от них стало только хуже. Знакомо? Не переживайте, с этим многие сталкивались. В такой ситуации вам поможет вот эта команда.
// замените staging именем ветки, до которой хотите сбросить
git reset --hard origin/staging
4. Удаляем последний коммит с сохранением сделанной работы
Удивительно, как мало программистов знают об этой команде. Она помогает избавиться от глупых опечаток, которые иногда закрадываются в коммиты.
git reset --soft HEAD~1
5. Удаляем последний коммит вместе со сделанной работой
Используйте эту команду, если напортачили по полной. Не переживайте — не ошибается лишь тот, кто ничего не делает.
git reset --hard HEAD~1
6. Откладываем изменения
Если вам нужно поработать с другой веткой, но вы не хотите коммитить изменения в текущей, вам пригодится команда stash.
git stash
7. Восстанавливаем отложенные изменения: возвращаемся к ветке и используем команду...
git stash apply
Имейте в виду, что команда
git stash apply
не удаляет запись из списка отложенных командой stash. Если вы хотите восстановить работу и сразу удалить ее из списка, используйте команду
git stash pop
8. Возвращаемся к предыдущему коммиту, отменяем перебазирование
Ошибки при перебазировании (rebase) — обычное дело. Если вы допустили такую ошибку, вам помогут команды ниже. Используйте reflog, чтобы найти указатель HEAD нужного коммита.
// Сначала найдите нужный указатель HEAD
git reflog
// Замените 5 на нужный вам номер указателя HEAD
// Будьте очень внимательны, не перепутайте номера
git reset --hard "HEAD@{5}"
Материал подготовлен в рамках курса "PHP Developer. Basic".
Всех желающих приглашаем на двухдневный интенсив «Пишем форму авторизации с нуля». На интенсиве мы:
- Сверстаем форму регистрации по макетам;
- Научимся работать с позиционированием, шрифтами, флексбоксами- Напишем обработчик формы регистрации с сохранением данных в БД и их валидацией;
- Сделаем страницу для просмотра зарегистрированных пользователей.
Комментарии (28)
Sklott
14.07.2021 17:05+7Она помогает избавиться от глупых опечаток, которые иногда закрадываются в коммиты.
От глупых опечаток в коммите помогает избавиться команда "git commit --amend". А такой ресет часто полезен когда надо слить 2 или более коммитов на одной ветке в один.
А вместо экзотической "git reset --hard HEAD~1" проще использовать обычный checkout, если конечно workspace чистый... Гораздо чаще используется команда "git reset --hard HEAD" чтобы как-раз этот workspace почистить от изменений. Ну "git clean" с флажками по вкусу тоже иногда бывает нужен.
kukovik
14.07.2021 18:37+4Про аменд соглашусь, но вот слить несколько коммитов в один лучше через "git rebase -i ...", а не через reset --soft. Тем более это совсем не обязательно нескольо последних коммитов.
Про то, что проще использовать обычный checkout не соглашусь. Проще запомнить, что "git reset --hard COMMIT" гарантированно приводит рабочее пространство к определенному состоянию, а запоминать разные способы уже как бы лишнее. Тем более вы не противник ресета, а просто ограничиваете область его применения.
kay
15.07.2021 10:26+1Часто пользуюсь `rebase -i`. Он не только слить коммиты может, но и отредактировать комментарий, изменить порядок коммитов, удалить определенный коммит, squash и многое другое.
Еще одна команда, которая недооценена - `cherry-pick`.
Zamuka
14.07.2021 20:55+1стешить стоит и с новыми файлами
git stash --include-untracked
которые не удаляет git reset --hard
но можно удалить их
git clean -df
предварительно проверив, ничего ли лишнего не удаляем с помощью
git clean -dfn
senatus
19.07.2021 01:18Вроде как последняя удаляет всё, что не относится к репозиторию. Потому будьте осторожны. У нас сторонние библиотеки, которые собираются с бубном, лежат как директория в проекте (помечена как игнорируемая). И вот такая команда почистила и их. Собирал неделю потом. Приходится, когда нет никого с такой же архитектурой процессора.
Sklott
19.07.2021 18:53Вообще-то нет. Чтобы почистились игнорируемые файлы надо еще добавить ключ -x.
Balling
14.07.2021 22:53Полезная команда для обновления git clone --mirror репозиториев. Там git pull не работает.
git remote update
tarekd
14.07.2021 22:53+4ожидал увидеть
git bisect
, по фактуgit reset
иgit stash
растянуты на 5 команд
titbit
14.07.2021 23:27+1Для новичков может быть полезной git push --dry-run — она позволяет эмулировать push не производя никаких действий, помогает получить уверенность в своих действиях и/или проверить все ли правильно настроено и сделано перед собственно push'ем. Если все прошло гладко, можно убрать --dry-run.
aamonster
15.07.2021 00:553-5 доставили.
3 – "как я в первый раз сломал git репозиторий" (hg не ломался вообще, а тут в первую же неделю). Не надо этому учить новичков. Пусть вначале разберутся с reflog... А тогда они уже сами будут знать про reset --hard.
Вообще git reset – это как во времена DOS файлы Disk Editor-ом восстанавливать... Можно восстановить, а можно всё сломать. А может оказаться, что уже и не восстановить (gc прошёл).
mSnus
15.07.2021 05:38-1Как вообще всё это можно выучить, если постоянно этим не пользуешься?((
fshp
15.07.2021 10:15+2Не нужно учить. Нужно прочитать документацию/книгу что бы иметь общее представление о возможностях. Что бы знать что гуглить.
А вот когда они понадобятся, вот тогда уже разбираться.
JustDont
15.07.2021 13:04Использовать GUI, чтоб ничего не учить, очевидно. И даже не гуглить.
fshp
16.07.2021 07:56Покажите мне хотя бы один gui, который может например смержить 3 ветки через octopus?
Я думаю вы даже не слышали о таком. Да и не услышите, пока продолжаете пользоваться gui.
JustDont
16.07.2021 09:09Если вы запускаете octopus вручную на машине разработчика — у вас очень насыщенная и интересная жизнь. С такой жизнью не до GUI, конечно.
fshp
16.07.2021 09:28Вот видите, вы даже не поняли о чем речь. Я не про сервис для деплоя. Я про мерж-стратегию говорю, коих в гите штук 20 есть.
Собрать монорепозиторий с сохранением истории? Пожалуйста - subtree.
Удалить секреты при публикации проекта? Пожалуйста - filter-branch.
И куча всего, о чем в GUI нет даже упоминания.
Мне приходилось за 10 лет 2 раза использовать subtree merge. Но я бы и не подумал что это вообще возможно, если б не вычитал в книге. Я бы просто грохнул всю историю, копипастнув код.
На картинке octopus merge. У коммита 4 родителя.JustDont
16.07.2021 09:44Вот видите, вы даже не поняли о чем речь.
Пардон, не владею телепатией.
Я про мерж-стратегию говорю, коих в гите штук 20 есть.
Всё еще не подразумевает необходимость сливания многих веток на машине разработчика. Для этого есть пулл реквесты и CI.
Ну и не говоря уж о том, что Git Extensions это прекрасно делает. Из GUI.Собрать монорепозиторий с сохранением истории? Пожалуйста — subtree.
Это определенно то, что надо знать, ага.
За 12 лет работы с гитом это мне пригодилось ровно 0 раз, хотя прочитал об этом я в рамках начального погружения в git.Удалить секреты при публикации проекта? Пожалуйста — filter-branch.
Секреты сразу не надо хранить, это во-первых. А во-вторых — я считаю filter-branch откровенно небезопасной вещью, и совершенно правильно, что её нет в нормальных GUI.
И куча всего, о чем в GUI нет даже упоминания.
С примерами у вас, правда, не очень задалось. Но я конечно вам и так поверю — куча так куча.
shaggyone
15.07.2021 06:50Ключ
-p
для всех команд, которые его поддерживают.
p.s. Надо бы сваять бота, который бы оставлял подобные комментарии в то и дело появляющихся постах про команды git.
fishHook
15.07.2021 09:01+6Опять каждый программист кому-то что-то задолжал. Какие долги навесили за последние пару недель? Каждый программист должен использовать <вот эти команды> bash, знать <вот эти команды> vim, <вот эти команды> git… Вот прям должен! Какая-то, товарищи авторы постов, у вас творческая импотенция. Очень это напоминает кликбейтные статьи на говноресурсах аля «Десять способов борьбы с похмельем» или «Как похудеть на 12 килограмм всего за четыре дня». Нижеплинтусный шлак, одним словом
CrazyAlex25
Да, reset`ом частенько пользуюсь, полезно.
Наверное каждый кто только начинал работать с git следовали другими командами:
BubaVV
xkcd.com/1597