как сбросить удаленную ветку на старый коммит - PullRequest
0 голосов
/ 16 апреля 2019

У меня есть удаленная ветка, в которой слишком много коммитов.Я хотел бы удалить все коммиты после 37fba70e из него.Вот как это выглядит на битбакете:

enter image description here

Я сделал git branch -f origin/start-defblock-on-long-hyphen 37fba70e локально, и теперь мой журнал выглядит так:

commit 37fba70ef7db1ce244d6e0c0d4e3b42d95dd7cb0 (HEAD -> origin/start-defblock-on-long-hyphen)
Author: First Last <first.last@company.com>
Date:   Thu Apr 11 13:28:51 2019 +0200

    added ')].' to valid end

commit 30fa3879845184405aba590b85380a6793ed5051
Author: First Last <first.last@company.com>
Date:   Wed Apr 10 16:02:31 2019 +0200

    accept to start def on moment start if start element is long dash

commit 57157406ab149b2934bfb2db7e6a6021bf950e02
Author: First Last <first.last@company.com>
Date:   Wed Apr 10 15:42:06 2019 +0200

    added long dash to valid start

Это выглядит правильно, поэтому я хочу перенести эти изменения в bitbucket, но git push origin start-defblock-on-long-hyphen ничего не меняет.Вывод просто:

Everything up-to-date

и история коммитов Bitbucket выглядит так же, как и раньше.

Как мне добиться того, чего я хочу?

1 Ответ

2 голосов
/ 16 апреля 2019

Вы бежали:

git branch -f origin/start-defblock-on-long-hyphen 37fba70e

Это была ошибка!Это создало локальную ветку с именем origin/start-defblock-on-long-hyphen.Эта ситуация довольно запутанная (для всех), потому что обычно имена, начинающиеся с origin/, зарезервированы для ваших собственных имен для удаленного отслеживания.

Ваш вывод git log теперь начинается с:

commit 37fba70ef7db1ce244d6e0c0d4e3b42d95dd7cb0 (HEAD -> origin/start-defblock-on-long-hyphen)

Это означает, что вы также запустили git checkout origin/start-defblock-on-long-hyphen, и теперь это ваша текущая ветвь.

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

git branch -m origin/start-defblock-on-long-hyphen start-defblock-on-long-hyphen

Я ожидаю, что это не удастся, потому что я верю, что у также есть локальная ветвь с именем start-defblock-on-long-hyphen.Если это так, вы можете:

  • переименовать эту ветку, затем переименовать эту;
  • удалить эту ветку, а затем переименовать эту;или
  • проверить эту ветвь, принудительно применить к ней нужный коммит и полностью удалить локальное имя origin/.

Точный выбор того, какое из этих действий выполнитьдля вас - каждый немного, немного отличается, но в конце концов они, вероятно, в конечном итоге будут иметь одинаковый эффект. Самый безопасный - сначала переименовать локальный, затем локальный origin/:

git branch -m start-defblock-on-long-hyphen old-start-defblock-on-long-hyphen
git branch -m origin/start-defblock-on-long-hyphen start-defblock-on-long-hyphen

(обратите внимание, что если у вас уже есть локальная ветвь с именем start-defblock-on-long-hyphen,у вас есть отдельная проблема).Как только вы это сделаете, вы можете повторить:

git push origin start-defblock-on-long-hyphen

, которая должна немедленно завершиться неудачей, потому что вам придется использовать --force или эквивалентный ему для команды Git на принимающей сторонеэтой операции, т. е. Git на Bitbucket, чтобы потерять все дополнительные коммиты, но если это цель, и любые другие пользователи этого Bitbucket Git соглашаются, что можно их потерять, продолжайте и используйте --force.Вы также можете использовать флаг -u или --set-upstream во время push, то есть:

git push --force -u origin start-defblock-on-long-hyphen
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...