重新定义一个主人头?

时间:2016-09-08 18:25:05

标签: git

我有一个回复,提交已经从:

主分支上的

... C1 ... C2 ... C3 ... Cn,假设我只在Cn提交点发现代码存在需要花时间调试的主要问题,我希望尽快拥有一个稳定/好的Master 。假设我知道C3是最后一个已知的好点。有没有办法让我重新定义主头C3,并将Cn标记为新的分支头,比如“debug”分支? (回购是远程的,但让我们说它不是公开共享的。)

3 个答案:

答案 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-checkoutgit-reset,具体取决于您是要移动还是放弃历史记录。前者是你要求的,而后者是为了完整而包括在内。

使用Checkout

您可以通过将主分支重置为任意提交来执行您想要的操作。例如:

# 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