我完全搞砸了我的分叉git仓库的主分支.
我想完全重置使用上游主仓库的内容推送到我的分支的主分支.我没有兴趣保留任何主分支更改或历史记录.
最简单的方法是删除我的分叉仓库并从上游项目中重新编译.但是,我在其他推动的分支机构工作,我不想失去.
那么如何用上游主站重置推送的主分支?
git clone https://myrepo.git
cd myrepo
git remote add upstream https://upstream.git
git fetch upstream
Run Code Online (Sandbox Code Playgroud)
我从哪里开始使用上游主站重置本地和远程主分支?
Joh*_*rop 122
您可以将本地主分支重置为上游版本并将其推送到您的存储库.
假设"upstream"是原始存储库,"origin"是你的fork:
# ensures current branch is master
git checkout master
# pulls all new commits made to upstream/master
git pull upstream master
# this will delete all your local changes to master
git reset --hard upstream/master
# take care, this will delete all your changes on your forked master
git push origin master --force
Run Code Online (Sandbox Code Playgroud)
(您可以将原始仓库定义为"上游" git remote add upstream /url/to/original/repo
.)
kir*_*gin 17
git reset --hard @{upstream}
Run Code Online (Sandbox Code Playgroud)
或者,更短:
git reset --hard @{u}
Run Code Online (Sandbox Code Playgroud)
或者您甚至可以更进一步,设置一个别名,让您只需输入git scrub
:
git config --global alias.scrub 'reset --hard @{upstream}'
Run Code Online (Sandbox Code Playgroud)
(这假设您的分支被配置为跟踪相应的远程分支,通常情况下,除非您正在做一些特殊的事情。请参阅 参考资料 了解有关git-branch(1)
跟踪的更多详细信息以及git-rev-parse(1)
有关分支规范语法的详细信息。)
然后你就git push --force
到你的叉子上,正如其他答案中所解释的那样。
小智 5
这会将您的master分支重置为上游master分支,并且如果自从分支以来该分支已被更新,它也会拉出这些更改。
git checkout master
git reset upstream/master
git pull --rebase upstream master
git push origin master --force
Run Code Online (Sandbox Code Playgroud)
PS:假设上游是原始回购,而原始是您的副本。