Переместить указатель ветви на другую фиксацию без проверки

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

6 ответов


N. B. Если вы просто хотите переместить филиала в другой фиксации самый простой способ -

git branch -f branch-name new-tip-commit

как подробно описано в ответе Криса Джонсена.

вы можете сделать это для произвольного судьи. Вот как перемещать указатель ветви:

git update-ref -m "reset: Reset <branch> to <new commit>" refs/heads/<branch> <commit>

общий вид:

git update-ref -m "reset: Reset <branch> to <new commit>" <ref> <commit>

вы можете выбрать гниды о сообщении reflog, если вам нравится - я верю branch -f одно отличается от другого. от reset --hard один, и это точно не один из них.


git branch -f branch-name new-tip-commit

вы также можете передать git reset --hard фиксация ссылка.

например:

git checkout branch-name
git reset --hard new-tip-commit

Я нахожу, что я делаю что-то вроде этого полу-часто:

предполагая, что эта история

$ git log --decorate --oneline --graph
* 3daed46 (HEAD, master) New thing I shouldn't have committed to master
* a0d9687 This is the commit that I actually want to be master

# Backup my latest commit to a wip branch
$ git branch wip_doing_stuff

# Ditch that commit on this branch
$ git reset --hard HEAD^

# Now my changes are in a new branch
$ git log --decorate --oneline --graph
* 3daed46 (wip_doing_stuff) New thing I shouldn't have committed to master
* a0d9687 (HEAD, master) This is the commit that I actually want to be master

просто обогатить обсуждение, если вы хотите двигаться myBranch филиала в настоящее commit, просто опустите второй аргумент после -f

пример:

git branch -f myBranch


Я обычно делаю это, когда я rebase находясь в отстраненном состоянии головы:)


на gitk --all:

  • щелкните правой кнопкой мыши на фиксации, которую вы хотите
  • ->создать новую ветку
  • введите название существующей ветви
  • нажмите return в диалоговом окне, что подтверждает замену старой ветви этого имени.

остерегайтесь, что повторное создание вместо изменения существующей ветви потеряет отслеживание-информация о филиале. (Вот как правило, не проблема для простых случаев использования, когда есть только один удаленный, и ваша локальная ветвь имеет то же имя, что и соответствующая ветвь в удаленном. См. комментарии для получения более подробной информации, Спасибо @mbdevpl за указание на этот недостаток.)

было бы здорово, если gitk была функция, в которой диалоговое окно имело 3 опции: перезаписать, изменить существующие или отменить.


даже если вы обычно наркоман командной строки, как я, git gui и gitk довольно красиво предназначен для подмножества использования git, которое они позволяют. Я настоятельно рекомендую использовать их для того, что они хорошо умеют (т. е. выборочно размещать куски в/из индекса в Git gui, а также просто фиксировать. (ctrl-s для добавления подписи: line, ctrl-enter для фиксации.)

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

у меня даже нет графического браузера файлов, но я люблю gitk / Git gui.


на рекомендуемое решение git branch -f branch-pointer-to-move new-pointer на TortoiseGit:

  • "git Show log"
  • Проверить "Все Ветви"
  • на строке, в которую вы хотите переместить указатель ветви (new-pointer):
    • щелкните правой кнопкой мыши, "создать ветку в этой версии"
    • рядом с "ветвью" введите имя ветви для перемещения (указатель ветви на перемещение)
    • в разделе "Base On" проверьте, что новый указатель правильно
    • Проверить"Force"
    • Ok

enter image description here

enter image description here