Переместить указатель ветви на другую фиксацию без проверки
для перемещения указателя ветви выделенной ветви можно использовать . Но как переместить указатель ветви не проверенной ветви, чтобы указать на другую фиксацию (сохраняя все остальные вещи, такие как отслеживаемая удаленная ветвь)?
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 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