Alb*_*ore 21 git branch push commit
我想将我最后几次提交从master转移到他们自己的分支中.
我电脑上的树看起来像这样:
W (some branch)
/
X1--X2--X3--X4--Y--Z1--Z2 (master)
Run Code Online (Sandbox Code Playgroud)
我希望它看起来像:
W (some branch)
/
X1--X2--X3--X4 (master)
\
Y--Z1--Z2 (my new branch)
Run Code Online (Sandbox Code Playgroud)
但是,GitHub上的树看起来像:
W (some branch)
/
X1--X2--X3--X4--Y (master)
Run Code Online (Sandbox Code Playgroud)
这就是我所看到的将最后提交移动到另一个分支的解决方案:
git checkout master
git branch my_new_branch
git reset <commit_id>
Run Code Online (Sandbox Code Playgroud)
我的问题是:在将提交移动到新分支后,我是否能够成功推送到GitHub?如果是这样,它还需要做除了这三个命令之外的其他操作吗?
Mar*_*air 19
(我假设<commit_id>
是...的对象名称X4
)
这些命令确实会让你最终得到你想要的东西.(您可能希望使用git reset --hard
保持工作树和索引与您要重置的提交相同,但是像往常一样,git status
在使用该命令之前要非常小心.)
如果你之后尝试将master推送到GitHub,它会告诉你所有内容都已经是最新的,因为master
on GitHub是一个提前提交.您可以强制推送,以便在GitHub上重置主服务器,但这会重写公共历史记录,所以只有在(a)您是唯一master
从GitHub 获取的人或(b)您可以让您合作者知道这样做是为了让他们不会意外地合并Y
.如果没关系,你可以这样做:
git push --force origin master
Run Code Online (Sandbox Code Playgroud)
...然后master
在GitHub上将与您的本地版本相同.