LINUX.ORG.RU

git «чистый» переход на ветку т.е. без моих закоммитаных изменений.

 ,


0

1

Нубский вопрос (в гите нуб), но что-то как-то найти ответ в документации не получается.

Есть бранч experimental в котором много моих коммитов по новому функционалу, но концепция меняется и ветка немного замораживается. Как перейти на мастер без изменений в ветке experimental ? git checkout master - все изменения experimental видны.

★★★★★

Ответ на: комментарий от Sorcerer

если перевысосать проект, то переход между ветками чистый, но если я ветку создавал и коммитался туда, то checkout master с коммитами бранча. мне нужно такое же поведение, как будто я только что проект склонировал.

vtVitus ★★★★★ ()
Последнее исправление: vtVitus (всего исправлений: 3)
Ответ на: комментарий от vtVitus

git branch -f master origin/master

Просто вы, случайно или нет, коммитили, находясь в мастере, а думали, что в experimental. Или experimental позже создали. Или находясь в мастере выполнили merge с experimental.

Sorcerer ★★★★★ ()
Последнее исправление: Sorcerer (всего исправлений: 1)
Ответ на: комментарий от vtVitus

Коммиты в мастере в вашем локальном репозитории, а не на сервере. Запустите таки gitk --all, он всё вам покажет. То, что на сервере, обозначено как origin/master, ваше - просто master.

Sorcerer ★★★★★ ()
Ответ на: комментарий от Sorcerer

А как тогда мои изменения видят люди, которые работают с этой веткой? И я push/pull изменениям делаю для этой ветки? Или они автоматом для мастера локальны, а для бранча на сервер ложатся чтоль ?

vtVitus ★★★★★ ()
Ответ на: комментарий от r0ck3r

нет кончено. в моём если перейти checkout на мастер, то последнее сообщение это Merge branch 'experemental' of https://bitbucket.org/ххх into experemental от дремучей даты.

а в переклонированном все честные коммиты людей в нём работающие.

vtVitus ★★★★★ ()
Ответ на: комментарий от vtVitus

в моём если перейти checkout на мастер, то последнее сообщение это Merge branch 'experemental' of https://bitbucket.org/ххх into experemental от дремучей даты.

мержа не было. если я рядом клонирую проект переход без моих изменений.

Выходит, что был. Удали мерж-коммит.

KennyMinigun ★★★★★ ()

Если правильно вас понял, то можно сделать попроще. Переименовать ветку experminetal в experminetal-что-то-там-устаревшее. И пересоздать её от master.

anonymous ()

Может редактор или ФМ или через что ты там смотришь «вживую» не обновляют состояние при переключении на ветку. Если всё же это не так, то ты сам что-то навертел как уже выше писали.

deep-purple ★★★★★ ()
Ответ на: комментарий от no-such-file

Как и должОн - Огромную партянку дифа.

В общем понятно, гиг монстр и, если чего-то не так, никто не знает чего же произошло.

Переклонировался, теперь всё ок.

vtVitus ★★★★★ ()
Последнее исправление: vtVitus (всего исправлений: 2)
Ответ на: комментарий от vtVitus

никто не знает чего же произошло

Почему никто не знает? Всё просто. Изменения относительно текущего закоммиченного состояния могут быть двух видов. «Нетронутые» и «за-stage-енные». «staged» это то, что пойдёт в коммит, когда ты выполнишь git commit. Нетронутые — это не тронутые изменения. Ты можешь считать, что это такая псевдо-ветка, которая всегда растёт из текущего состояния. Кстати, gitk её так и показывает, в виде одного или двух состояний, растущих из текущего закоммиченного. Когда ты делаешь git checkout другой ветки, эта псевдоветка пересаживается на новое состояние.

Стало быть, ты был на ветке experimental. Сделал изменения. Потом сделал git checkout master. Git сохранил разницу между состояниями файлов и тем, что было сохранено в последнем коммите в experimental. Потом воспроизвёл состояние, сохранённое в последнем коммите в master. А потом раскатал тот патч-разницу. В итоге ты видишь изменения, которые ты якобы делал в experimental, но в master.

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

i-rinat ★★★★★ ()