要移动检出分支的分支指针,可以使用git reset——hard命令。但是如何移动未签出分支的分支指针指向不同的提交(保持所有其他东西,如跟踪远程分支)?
当前回答
git branch --force <branch-name> [<new-tip-commit>]
如果忽略new-tip-commit,则默认为当前提交。
New-tip-commit可以是一个分支名称(例如master, origin/master)。
其他回答
总之:
右键单击要提交的文件 ->创建新分支 输入现有分支的名称 在确认替换该名称的旧分支的对话框上按回车键。
注意,重新创建而不是修改现有的分支将丢失跟踪分支信息。(对于只有一个远程且本地分支与远程中相应分支具有相同名称的简单用例来说,这通常不是问题。查看评论了解更多细节,感谢@mbdevpl指出这个缺点。)
如果gitk有这样一个特性,对话框有3个选项:覆盖、修改现有的或取消,那就太棒了。
即使你通常像我一样是命令行迷,git gui和gitk也为它们所允许的git使用子集而精心设计。我强烈推荐使用他们擅长的(例如,在git gui中有选择地将块放入/取出索引,也只是提交。(按ctrl-s添加一个签名:行,按ctrl-enter提交。)
当您将更改整理成一个漂亮的补丁系列提交给上游时,Gitk非常适合跟踪几个分支,或者其他任何需要跟踪多个分支中间内容的地方。
我甚至没有打开图形文件浏览器,但我喜欢gitk/git gui。
git branch --force <branch-name> [<new-tip-commit>]
如果忽略new-tip-commit,则默认为当前提交。
New-tip-commit可以是一个分支名称(例如master, origin/master)。
Git 2.23.0引入了Git -switch命令,该命令也可以用于完成此任务。
git switch -C <branch-name> [<start-point>]
-C(大写C)选项表示如果<branch-name>已经存在,则将其重置为<起始点>。
使用-c(小写C),它将尝试创建一个新的分支,但如果已经存在则会失败。
<start-point>可以是一个散列、一个标记或另一个分支名称。
你可以对任意裁判这样做。这是如何移动分支指针:
git update-ref -m "reset: Reset <branch> to <new commit>" refs/heads/<branch> <commit>
其中-m为分支的reflog添加一条消息。
一般形式是
git update-ref -m "reset: Reset <branch> to <new commit>" <ref> <commit>
如果你喜欢,你可以挑关于reflog消息的虱子-我相信branch -f是不同于reset -难的,这不是他们中的任何一个。
打开文件.git/refs/heads/<your_branch_name>,并将存储在那里的散列更改为您想要移动分支头部的散列。只需编辑和保存文件与任何文本编辑器。只需确保要修改的分支不是当前活动的分支。
免责声明:可能不是一个明智的方法,但可以完成工作。
推荐文章
- 为什么我需要显式地推一个新分支?
- 如何撤消最后的git添加?
- Rubymine:如何让Git忽略Rubymine创建的.idea文件
- Gitignore二进制文件,没有扩展名
- Git隐藏错误:Git隐藏弹出并最终与合并冲突
- 了解Git和GitHub的基础知识
- 没有。Git目录的Git克隆
- 在GitHub上有一个公共回购的私人分支?
- Git与Mercurial仓库的互操作性
- 忽略git中修改(但未提交)的文件?
- “git restore”命令是什么?“git restore”和“git reset”之间有什么区别?
- Git合并与强制覆盖
- Git拉另一个分支
- 在Bash命令提示符上添加git分支
- 如何更改Git日志日期格式