Работая над Github, я часто попадаю в ситуацию, когда человек, объединяющий мой запрос на перенос, объединяется с ребазом. Благодаря этому теперь мой репозиторий фактически застрял как «вилка». Вот изображение, показывающее график того, как дерево выглядит после перебазирования:
Проблема в том, что теперь мои origin\master
и origin\HEAD
находятся вне пути source_repository\master
. Что я делал до сих пор:
source_repository
. Затем я клонирую этот новый репозиторий локально, и все в порядкеorigin\HEAD
на другую ветку, которая находится на пути перебазирования. Затем удалите origin\master
и воссоздайте его, чтобы указать новую ГОЛОВУ. Наконец, переключите origin\HEAD
, чтобы он указывал на новый origin\master
.Оба эти варианта кажутся слишком сложными, и кажется, что должен быть способ попроще. Что это?
@Mort, да, вы правы ... моя локальная перебазировка работает. Но проблема возникнет, когда я попробую git push
в origin
. Это не говорит о том, что мне сначала нужно вытащить изменения ... но это приводит к слиянию. По сути, мне нужна была возможность выполнить git push --force
после локального ребазирования.
Моя проблема заключалась в том, что инструмент, который я использую (SourceTree), по умолчанию не раскрывает git push --force
. Похоже, они хотели «защитить пользователей от самих себя», как видно из этого обращения в службу поддержки: https://community.atlassian.com/t5/Sourcetree-questions/How-do-I-perform-a-formed-push-push-f-from-SourceTree/qaq-p/257351
К счастью, эта опция теперь реализована, только вам нужно включить ее, перейдя в Tools -> Options -> Git -> Enable Force Push
.
После того, как у вас есть эта опция, вы можете rebase
ваш локальный мастер, а затем push --force
, чтобы получить ваш origin\master
по новому пути.
Если вы перебазируете локально, вы, вероятно, обнаружите, что git автоматически увидит, что «My pull req» на
master
иorigin/master
одинаковы, и оставит вам только один экземпляр фиксации.