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



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

687   6  

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, а также просто совершать. (сочетание клавиш Ctrl-S, Чтобы добавить подпись-не горит: линия, комбинация Ctrl-Enter, чтобы совершить.)

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

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

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

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

enter image description here

enter image description here

Comments

    Ничего не найдено.