我有一个回复,提交已经从:
主分支上的 ... C1 ... C2 ... C3 ... Cn
,假设我只在Cn
提交点发现代码存在需要花时间调试的主要问题,我希望尽快拥有一个稳定/好的Master 。假设我知道C3
是最后一个已知的好点。有没有办法让我重新定义主头C3
,并将Cn
标记为新的分支头,比如“debug”分支? (回购是远程的,但让我们说它不是公开共享的。)
答案 0 :(得分:2)
因此,如果master
的分支看起来像
... C1 ... C2 ... C3 ... Cn
您可以执行以下操作:
获取上面的master
的当前版本
git checkout master
创建一个新的分支,为您保留Cn
git checkout -b debug_branch
再次结帐master
以便您可以修复
git checkout master
回滚提交以使其进入良好状态
git reset --hard C3
将此版本的master
推回到遥控器,这将“擦除”Cn
提交
git push -f
现在,您可以在本地返回该调试分支以找出问题所在
git checkout debug_branch
答案 1 :(得分:2)
在Git中, master 只是指向给定提交的另一个分支标签。从技术上讲,您根本不需要名为 master 的分支存在于存储库中。
您最好的两个选项是git-checkout
和git-reset
,具体取决于您是要移动还是放弃历史记录。前者是你要求的,而后者是为了完整而包括在内。
您可以通过将主分支重置为任意提交来执行您想要的操作。例如:
# Move current master branch aside.
git branch -m master debug
# Create a new branch at committish. Use a branch name or a commit ID.
git checkout -b master c3
或者,如果您不关心现有历史记录,最快的解决方案就是将 master 的HEAD重置为committish。例如,假设您已经在主分支上:
git reset --hard c3
虽然这不会在主分支中保留您当前的历史记录,但仍然可以通过reflog访问完整的历史记录,直到修剪完毕。
答案 2 :(得分:1)
git branch -M master debug
git checkout -b master C3
git push -f
或(当试图保持合并时):
git branch -M master debug # same as above
git checkout -b master C3 # same as above
git merge -s ours debug
git push