Как заменить коммит на коммит из другой ветки

У меня есть коммит из ветки, которая была удалена. Я имею в виду выбранный коммит на картинке ниже. Удаленная ветка — желтая.

введите здесь описание изображения

Как видите, прямо под выбранным коммитом есть точная копия этого коммита в ветке Basic_Gameplay (это зеленая ветка слева).

Я хочу избавиться от фиксации в несуществующей желтой ветке и просто использовать дубликат в зеленой ветке. Однако проблема в том, что на выбранный желтый коммит ссылаются в слиянии с синей основной ветвью, как вы можете видеть на рисунке.

Есть ли способ избавиться от желтого коммита и заменить его коммитом из зеленой ветки Basic_Gameplay, чтобы коммит, на который ссылаются для слияния с синим мастером, был зеленым, а не желтым?


person Jorge Luque    schedule 05.06.2020    source источник


Ответы (1)


Вы можете сделать следующее в фиксации, ссылаясь на желтую фиксацию, и удалить ссылку. (убедитесь, что у вас есть ссылка на правильный родительский коммит)

git replace --edit <sha>
person joy    schedule 05.06.2020
comment
спасибо, вроде работает. Я могу изменить способ визуального представления ветвей в SourceTree, но он по-прежнему показывает, что старый SHA1 в родительском разделе. Этот метод также не работает в SmartGit, а также кажется, что изменения ссылок не передаются в удаленное репо. Есть ли другой способ отредактировать SHA1 родителей коммита? - person Jorge Luque; 05.06.2020
comment
возможно, это может помочь: stackoverflow.com/questions/14244888/ - person joy; 05.06.2020
comment
Хотя это исправило мое локальное репо, я не могу отправить новые ссылки git на удаленное репо. Я попытался выполнить принудительное нажатие в SourceTree, но он говорит: ! [rejected] master -> master (stale info) error: failed to push some refs to 'https://gitlab.com..... - person Jorge Luque; 06.06.2020
comment
Итак, я исправил предыдущую ошибку, сняв защиту с ветки в GitLab. Однако после того, как я нажму основную ветку, весь репозиторий выглядит испорченным. Есть ли способ отправить все изменения, внесенные в ссылки git? - person Jorge Luque; 06.06.2020
comment
О, неважно, это исправлено после того, как я заставил нажать ВСЕ ветки. еще раз спасибо! - person Jorge Luque; 06.06.2020
comment
git replace — низкоуровневая команда, и ее должны использовать только специалисты. Вы можете использовать git rebase --rebase-merges --interactive для удобного изменения истории. - person Mikhail; 10.06.2020