LINUX.ORG.RU

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

 checkout,


0

1

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

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

★★★★★

Последнее исправление: vtVitus (всего исправлений: 1)

Запустите gitk --all и смотрите, где сейчас вы, где мастер, где ваши коммиты, что в staged и что в unstaged.

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

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

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

по коду т.е. физически.

То скорее всего ветка experimental уже вмержена в master и ничего не поделаешь (кроме как руками ревернтнуть «ненужные» коммиты в master)

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

git branch -f master origin/master

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

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

пробовал не помогает

HEAD is now at 8fbb898d0 experemental legal review

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

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

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

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

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

git push по умолчанию отправляет только текущую ветку.

Sorcerer ★★★★★
()
Ответ на: комментарий от 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 ★★★★★
()

git checkout master && git reset --hard `git rev-list --max-parents=0 HEAD | tail -n 1` && git pull

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

Заодно можно еще глянуть

git remote update
git diff master origin/master
git diff origin/master origin/experimental
git diff experimental origin/experimental
Dudraug ★★★★★
()
Последнее исправление: Dudraug (всего исправлений: 1)

После чекаута git pull сделал?

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

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

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

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

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

Потому-что гит для инопланетян :)

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

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

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

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

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

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

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

Ну вот, а я всегда для переноса unstageнного в другую ветку stash и stash pop делал, а оно из коробки оказывается...

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

Я погорячился. Похожим образом работает, если в ветке, куда переключаешься, не было изменений в файле. Если были, то git ругнётся.

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

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

Конечно никто не знает, что ты там нафигачил. Тут телепатов нет.

no-such-file ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.