3.3 Git – Ветки – Команда checkout при незакоммиченных изменениях

preview_player
Показать описание
Проблемы с checkout при наличии изменения, варианты их решения:
- удаление с checkout -f
- сохранение с git stash
Рекомендации по теме
Комментарии
Автор

Отличная подача. Заранее подготовленный текст. Никаких "Ну" "Вот" и тому подобное. Чёткая речь и доходчивая подача. Благодаря коротким видео очень легко смотреть. После скитаний в ютубе решил остановиться именно здесь. Не понимаю почему так мало лайков.

vakulasan
Автор

Спасибо! Пожалуй, лучший курс по git!

Ecto-Gamet
Автор

Спасибо за ваш труд! Реально полезное видео. Я 100 раз сталкивался с описанной проблемой и всегда делал через ж.. (коммитил свои временные изменения, а потом перезаписывал полученный коммит с помощью ammend)

ВиталийМорозов-въ
Автор

На 05:20 автор скорее всего имел ввиду fix:index.html = master:index.html

RavilKhalilov
Автор

очень доступно и по делу. всем рекомендую

xmelsky
Автор

Топовый контент) Помню как пришел на первое место работы и сразу же возникла проблема с переходами между ветками) В итоге я просто комитил не завершенные изменениея, а затем отменял комит)) Этот видос многим поможет!)

vadim_tech
Автор

Как же я ошибался, что раньше не смотрел этого! Спасибо большое за видео.

АзатИмаев-ьп
Автор

Илья, ничего непонятно: мы меняем индекс.хтмл, но чекаут спокойно переключается, потому что файлы одинаковые, это как вообще?? мы же его поменяли, он уже отличается от мастера, как он может видить, что индекс.хтмл в обоих ветках одинаковый??? мы же изменения внесли

eugenenovikov
Автор

Долго доходило, но теперь понял. Объясню на примере, если вы тоже столкнулись с недопониманием:
1.
Ветка master, файл index.html:
"Данные 1"

Ветка feature, файл index.html:
"Данные 1"

2. Мы вносим изменения в ветке master и пусть будет добавлено: "Данные 2"
При переходе на ветку feature, у нас не возникает ошибки, потому что и там, и там, исходные данные одинаковые. В коммитах последних они идентичны
Так что можно считать, что какая разница, в какую ветку мы перейдём, изменения, которые мы сделали, будут одинаково подходить обеим веткам и не возникнет конфликтов.

3. Но если бы исходные данные отличались, то файл в ветках уже не идентичен и могут возникнуть конфликты при переносе их, поэтому выдаст ошибку.

Было master:
"Данные один"

Было в feature:
"Данные два"

Вот теперь исходные данные отличаются и при внесении изменении, при переходе будет конфликт.
На следующем видео из плейлиста на 1:06 буквально наглядный пример того, как это работает.

mrBarskChannel
Автор

спасибо огромное, очень полезная инфа по гиту

alexanonymous
Автор

1:21
Переключение С УДАЛЕНИЕМ текущих изменений (1:53 можно на тот же файл, чтобы вернуть прежнее состояние до изменений ) - флаг -f
Переключение С СОХРАНЕНИЕМ текущих изменений - git stash (2:45 4:32)
3:17 Вернуть изменения - git stash pop
3:31 изменения можно добавлять командой git stash pop не только в ту же ветку, но и в другие, так как они хранятся отдельно от веток
4:44
7:39 Итог

Леонид-сз
Автор

На 5:22 ошибка, не script.js = script.js, а index.html = index.html

evgeny-chugaev
Автор

Друзья от ошибок в видосах чисто польза. Лучше усваивается материал, больше комментов продвигает курс) ну и мы общаемся помогаем друг другу все дела) курс же бесплатный, так что веселей)

olexklym
Автор

Редко пишу комменты, но ты просто огонь! До этого прослушала 2 длинных курса у других, тоже хорошие, в целом понимала, но ты все расставил по полочкам! Именно твоих объяснений и не хватало!

Nadezhda
Автор

что то я не догнал про переключения. чем html от js отличается? и там и там изменения. но в js пропадают изменения при переключении а в html нет. почему?

ВалерийФроловский
Автор

Получается git checkout -f в рамках не ветки, но отдельного коммита - тоже самое, что и git reset --hard?

Леонид-сз
Автор

4:44 - возникло. Пытаюсь воспроизвести поведение из примера автора, не получается (3 сентября 2023, git 2.42.0, Ubuntu 22.04.3 LTS).
Добавляю в index.html один символ, смотрю состояние:
$ git status
On branch feature
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: index.html

no changes added to commit (use "git add" and/or "git commit -a")

Пытаюсь перейти на ветку master:
$ git checkout master
error: Your local changes to the following files would be overwritten by checkout:
index.html
Please commit your changes or stash them before you switch branches.
Aborting

Cтоит хоть один символ поменять в файле index .html - сразу же гит не даёт сделать git checkout, оповещая об ошибке (опасности потери сделанных изменений) И это вне зависимости от того, добавлен index.html в индекс гита или нет. Свитчнуться на другую ветку получается только через git checkout -f <branch_name> или через git stash

А вот если на ветке feature добавить новый файл azaza.html, то действительно вполне спокойно можно будет переключиться на ветку master. И на ветке master тоже будет этот же самый azaza.html, поскольку данный файл просто присутствует в working tree, но при этом является неотслеживаемым (untracked).

dino_source
Автор

не понятно про checkout - в каком смысле checkout отработает с непроиндексированными изменениями, если файлы в ветках не различаются, если мы, как раз и наделали изменений в одной из веток? мне chatGPT объяснил так, что получится сделать checkout, если не возникает конфликта

AndreiKratovich
Автор

По-моему, сейчас уже checkout при незакоммиченных изменениях и одинаковых файлах работает по-другому. Либо гит ругается, если не добавить их в индекс, либо просто удаляет изменения и переключается на другую ветку, если добавить.

nefed-L
Автор

Хм, у меня не появляется M index.html

вместо этого выходит ошибка:

error: Your local changes to the following files would be overwritten by checkout:
index.html
Please commit your changes or stash them before you switch branches.
Aborting

И переключение между веток не происходит. Это какое-то обновление у GIT или я что-то делаю не так?

ВикаКоко-рю