LINUX.ORG.RU

Как убрать из ветки несколько последних коммитов, и перенести их в другую ветку?

 


1

3

Есть ветка experimental. Начиная с определенного коммита я начал писать в ней жуйню. Осознал это после двух недель мытарств.

Теперь мне нужно сделать новую ветку, и переместить туда несколько последних коммитов из experimental. А в experimental их соответственно убрать.

Как это сделать?

★★★★★

Комиты, надеюсь, не публичные?

Если публичные — revert для отката, если нет — reset.

Ну а далее cherry-pick нужных коммитов.

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

Комиты, надеюсь, не публичные?

Публичные, и лежат на гитхабе.

revert для отката

И в какую ветку попадут откаченные коммиты?

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

если нет — reset. Ну а далее cherry-pick нужных коммитов.

Извращенец, просто сделать из head новую ветку, а experimental reset-нуть

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

сделать из head новую ветку, а experimental reset-нуть

Вот такие команды будут правильными ? :

git checkout -b ugly_branch
git push origin ugly_branch

git checkout experimental
git reset --soft 8eafd44b4c85e95ac669d4ac156c476f13eac212

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

вроде да, если кроме тебя репозиторий никто не использует, ну и бекап сделай на всяк случай

и после ресета надо запушить экспериментал втеку

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

и после ресета надо запушить экспериментал втеку

Вот именно это и не получается. я делаю:

git reset --soft 8eafd44b4c85e95ac669d4ac156c476f13eac212

git push
To git@github.com:xintrea/mytetra_dev.git
 ! [rejected]        experimental -> experimental (non-fast-forward)
error: failed to push some refs to 'git@github.com:xintrea/mytetra_dev.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Merge the remote changes (e.g. 'git pull')
hint: before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.


Я пробую сделать как рекомендуется, git pull. При этом с удаленного репозитария снова накатываются изменения после 8eafd44b4c, и получается, что локально сделать ресет я могу, но залить его в репозитарий - не могу.

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

но залить его в репозитарий - не могу.

git push --force

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

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

Блин, вроде сделал. Причем перед тем как делать, зафиксировал последние изменения коммитом.

На гитхабе видно, что в experimental все откатилось.

На радостях запустил QtCreator, сделал в нем pull на всякий случай. А он говорит: есть незафиксированные изменения. Что с ними сделать? Ну я жмякнул «Спрятать и восстановить». В результате теперь опять в локальной experimental все ненужные изменения.

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

вообще теперь тебе достаточно ресет --hard локальный или как на той картике выше по треду - скачать заново

Deleted
()
Ответ на: комментарий от Xintrea

Сделал опять софт ресет до нужного коммита, сделал push. Локально файлы в experimental стали в состояние коммита, до которого делал ресет, это правильно. Сделал push --force. Посмотрел на Github, состояние проекта в experimental правильное, откатанное до нужного коммита. А в ugly-ветке мои ugly-коммиты. То есть, на гитхабе все нормально.

Снова запустил QtCreator, делаю на всякий случай опять pull. А он мне опять показывает: есть незафиксированные данные. Что с ними сделать? Спрятат и восставновить? Отменить их? Я нажал отменить их. И в консоли вижу:

git reset --hard
git pull


Впринципе, локальный проект сейчас соответствует тому состоянию что на GitHub. Но после reset --hard я боюсь заливать изменения на github. Не получится ли так, что после заливки исчезнут коммиты, которые находятся в ugly-ветке?

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

Не получится ли так, что после заливки исчезнут коммиты, которые находятся в ugly-ветке?

Нет. // сделай бэк, если боишься

anonymous
()
Ответ на: комментарий от i82

- ой, а я отписать про -not, хотел

МСТ опередили, почти все.

anonymous
()
Ответ на: комментарий от i82

- ой, а я отписать про -not, хотел

МСТ опередили, почти все.

anonymous
()
Ответ на: комментарий от Deleted

Я документацию читаю и нифига не понимаю.

https://githowto.com/ru/removing_commits_from_a_branch

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



Для начала отметьте эту ветку

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

git tag oops



Вот что хотел сказать автор?? Куда он ставит метку? Метку на ветку? Так у нее есть имя, зачем еще метка? Метку на коммит? Метку на момент времени, которая будет распространятся на все ветки, которые пересекают этот момент?

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

Мне одному кажется, что это работа для rebase --onto?

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

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

Блин, вот я тебя сразу не понял. Кроме меня юзает ветку я. То есть, у меня три места размещения: на работе, дома, на ноутбуке.

Я изменил ветку, сидя на работе, теперь у меня на работе и в репозитарии на github правильное «откаченное» состояние проекта.

Прихожу домой, делаю git pull, смотрю код - отката нет.

Как теперь привести проект в других местах размещения к тому же состоянию, что и в репозитарии на github?

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

Как теперь привести проект в других местах размещения к тому же состоянию, что и в репозитарии на github?

git fetch && git reset --hard origin/branch-name

anonymous
()

если не смертельно - я бы сделол новый бранч, а в старом бы просто ревертнул шлак

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