要移动检出分支的分支指针,可以使用git reset——hard命令。但是如何移动未签出分支的分支指针指向不同的提交(保持所有其他东西,如跟踪远程分支)?


当前回答

建议解决方案git branch -f branch-pointer-to-move new-pointer在TortoiseGit中:

“Git显示日志” 检查“所有分支” 在你想要分支指针移动到的那一行(new-pointer): 右键单击“在此版本创建分支” 在“Branch”旁边输入要移动的分支名称(Branch -pointer- move) 在“Base On”下,检查新指针是否正确 检查“力” 好吧

其他回答

为了丰富讨论内容,如果你想将myBranch分支移动到当前提交,只需省略-f之后的第二个参数

例子:

吉特妙兰


我通常这样做,当我在一个分离的头部状态下重新设置:)

总之:

右键单击要提交的文件 ->创建新分支 输入现有分支的名称 在确认替换该名称的旧分支的对话框上按回车键。

注意,重新创建而不是修改现有的分支将丢失跟踪分支信息。(对于只有一个远程且本地分支与远程中相应分支具有相同名称的简单用例来说,这通常不是问题。查看评论了解更多细节,感谢@mbdevpl指出这个缺点。)

如果gitk有这样一个特性,对话框有3个选项:覆盖、修改现有的或取消,那就太棒了。


即使你通常像我一样是命令行迷,git gui和gitk也为它们所允许的git使用子集而精心设计。我强烈推荐使用他们擅长的(例如,在git gui中有选择地将块放入/取出索引,也只是提交。(按ctrl-s添加一个签名:行,按ctrl-enter提交。)

当您将更改整理成一个漂亮的补丁系列提交给上游时,Gitk非常适合跟踪几个分支,或者其他任何需要跟踪多个分支中间内容的地方。

我甚至没有打开图形文件浏览器,但我喜欢gitk/git gui。

说实话,我很惊讶为什么没有人想到git push命令:

git push -f . <destination>:<branch>

点(.)引用本地存储库,您可能需要-f选项,因为目标可能“位于其远程对应对象的后面”。

虽然此命令用于在服务器中保存更改,但结果与将远程分支(<branch>)移动到与本地分支(<destination>)相同的提交完全相同。

你也可以传递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

建议解决方案git branch -f branch-pointer-to-move new-pointer在TortoiseGit中:

“Git显示日志” 检查“所有分支” 在你想要分支指针移动到的那一行(new-pointer): 右键单击“在此版本创建分支” 在“Branch”旁边输入要移动的分支名称(Branch -pointer- move) 在“Base On”下,检查新指针是否正确 检查“力” 好吧