Git 将分支指针移动到不同的提交而不签出
要移动签出分支的分支指针,可以使用Git 将分支指针移动到不同的提交而不签出,git,git-branch,Git,Git Branch,要移动签出分支的分支指针,可以使用git reset--hard命令。但是如何将未签出分支的分支指针移动到另一个提交点(保持所有其他内容,如跟踪远程分支)?git branch-f[] 如果省略了新提示提交,则默认为当前提交。您可以对任意引用执行此操作。以下是如何移动分支指针: git update-ref -m "reset: Reset <branch> to <new commit>" refs/heads/<branch> <
git reset--hard
命令。但是如何将未签出分支的分支指针移动到另一个提交点(保持所有其他内容,如跟踪远程分支)?git branch-f[]
如果省略了
新提示提交
,则默认为当前提交。您可以对任意引用执行此操作。以下是如何移动分支指针:
git update-ref -m "reset: Reset <branch> to <new commit>" refs/heads/<branch> <commit>
如果您愿意,您可以对reflog消息进行挑剔-我相信
分支-f
与重置--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
在gitk中--all:
- 右键单击所需的提交
- ->创建新分支机构
- 输入现有分支机构的名称
- 在对话框上按return键,确认替换该名称的旧分支
gitk
有一个对话框有3个选项的功能,那就太酷了:覆盖、修改现有或取消
即使你像我一样是一个命令行迷,
git-gui
和gitk
都是针对git使用的子集而设计的。我强烈建议您根据自己的专长使用它们(例如,在git gui中有选择地将大块头放入/移出索引,也只是提交)
<>代码> GITK/<代码>对于跟踪几个分支是很好的,同时你把你的变化整理成一个很好的补丁序列来提交上游,或者任何你需要跟踪你在多个分支中间的东西。
我甚至没有打开图形文件浏览器,但我喜欢gitk/git gui。在:
- “Git显示日志”
- 选中“所有分支”
- 在希望分支指针移动到的行上(新指针):
- 右键单击“在此版本创建分支”
- 在“分支”旁,输入要移动的分支的名称(要移动的分支指针)
- 在“基于”下,检查新指针是否正确
- 检查“力”
- 嗯
为了丰富讨论内容,如果要将
myBranch
分支移动到当前的提交,只需省略-f
例如:
git分行-f myBranch
我通常在头处于分离状态时重新设置基础时这样做:)老实说,我很惊讶没有人想到git push命令:
git push -f . <destination>:<branch>
git推送-f.:
点(.)表示本地存储库,您可能需要-f选项,因为目标可能“位于其远程对应的后面”
尽管此命令用于保存服务器中的更改,但结果与将远程分支(
)移动到与签出分支的本地分支(
)相同的提交(如果要指向的提交在当前分支之前)完全相同(除非您希望撤消当前分支的最后一次提交,否则应该是这样),您只需执行以下操作:
git merge --ff-only <commit>
打开文件
.git/refs/heads/
,将其中存储的哈希更改为要移动分支头的哈希。只需使用任何文本编辑器编辑并保存文件。只需确保要修改的分支不是当前活动的分支
免责声明:可能不是一种可取的方法,但可以完成任务。如果要将未签出的分支移动到另一个提交,最简单的方法是使用-f选项运行git branch命令,该命令确定分支头应指向的位置: 吉特分行-f 请小心,如果您尝试移动的分支是当前分支,则此操作将不起作用。 要移动分支指针,请运行以下命令: git更新参考-m“重置:重置为”参考/heads/ git update ref命令安全地更新ref中存储的对象名
希望,我的回答对您有所帮助。信息来源是。或者对于任意引用,
git update ref-m“reset:reset to”
(如果您愿意,您可以选择有关reflog消息的细节-我相信分支-f
与reset--hard
不同,这两者都不是。)Jefromi,请写一个单独的答案,这样你就可以得到选票了。:)这是一个更好的答案,因为它处理了99%的情况,并且实际上符合文档git help branch
说“-f,-force Reset to if已经存在。如果没有-f,git branch拒绝更改现有分支。“我正在做git branch-f master
,它告诉我致命:无法强制更新当前分支。
嗯,我现在必须做什么,在允许我使用此命令之前,请查看其他随机分支?如果您尝试移动的分支是您当前的分支(HEAD
指向它),则此操作将不起作用。听起来您想要做的只是从一个不同的提交中创建一个分支,而不是从现在开始创建。如果我的理解是正确的,那么为什么不直接从commit创建一个新的分支呢?您想使用git-br创建它
git push -f . <destination>:<branch>
git merge --ff-only <commit>
git push . <commit>:<branch>