Отказ Git обязывает Github для отклоненных запросов на тягу - программирование
Подтвердить что ты не робот

Отказ Git обязывает Github для отклоненных запросов на тягу

Я разветкил кого-то проект и сделал некоторые коммиты. Я заполнил запрос на перенос, и он не был принят (либо изменение было нежелательным, либо автор переписал функциональность, которая соответствует "его стилю" ). Теперь я застрял с моей местной вилкой, имея несколько дополнительных коммитов, которые никогда не смогут попасть в восходящий поток. Я могу отменить наборы изменений, но тогда у меня есть в два раза больше дополнительных коммитов, и мне придется их телеграфировать навсегда. Это просто уродливо!

Какой лучший способ отказаться от этих коммитов, которые никто не хочет, и вернуть свою вилку для отслеживания вверх по течению? Я знаю, что могу полностью удалить вилку и перекрой ее, но это действительно тяжело, и я потеряю любую другую работу, которую я делаю.

4b9b3361

Ответ 1

Вы можете reset ваше состояние репо к более раннему фиксации. Сначала выясните, какой фиксатор вы хотите использовать reset для своего репо:

    git log

В reset ваше репо в это состояние:

    git reset --hard <commit_hash>

Если у вас есть разветвленное дистанционное репо, вы можете нажать на него следующие изменения:

    git push -f <remote> <branch>

Возможно, вы захотите изменить свой рабочий процесс, чтобы упростить работу в будущем.

Когда я форк репо и делаю свои собственные изменения, я сначала создал два пульта. Один пульт укажет на разветвленное репо (ex: origin) и добавит еще одну удаленную точку в репозиторий оригинал, который был разветвлен (ex: original_repo). Поэтому у меня может быть что-то вроде:

    $ git remote
    origin
    original_repo

Я создаю ветку для выполнения всей моей работы, например: feature. При создании запроса на перенос я делаю это из ветки feature в ветвь original_repo master. Если запрос на извлечение отклонен, как и ваш пример, вы можете просто отказаться от этой ветки. Если вы хотите больше работать, просто создайте еще одну ветку из master и используйте ее для работы.

Я также не фиксирую и не объединяю локальные изменения в ветку master. Я использую ветвь master для синхронизации с ветвью original_repo master. например:

    git checkout master
    git fetch original_repo
    git merge original_repo/master

Это гарантирует, что ветвь master всегда будет синхронизирована с исходной ветвью repo master. Например, если запрос на перенос был принят и объединен, когда происходит выборка и слияние, локальный master также будет иметь все "утвержденные" коды, используемые в исходном репо.

В основном используйте master для синхронизации с исходным репо master и всегда выходите из мастера, когда хотите внести изменения. Используйте те ветки для ваших запросов на возврат к исходному репо.

Ответ 2

Верните свою основную ветвь на несколько шагов (при условии, что вы хотите пропустить три фиксации назад) и перепишите репозиторий github, нажав на -f.

git reset --hard HEAD~3
git push -f origin master