如何将git master分支重置为分叉存储库中的上游分支?

fos*_*dom 71 git

我完全搞砸了我的分叉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.)

  • 首先需要调用`git fetch upstream` (4认同)
  • 它也应该是`git reset --hard upstream/master`来重置工作目录。但是你的答案是正确的。 (3认同)
  • 正如@HenryE指出的那样,无法首先使用`git fetch upstream`获取上游更改通常会产生以下非人类可读错误:`"致命:模糊参数'upstream/master':未知修订版或路径不在工作树中. "` (3认同)
  • 请注意,强制推送会自动关闭您向上游发出的所有打开的拉取请求。我没有意识到这一点,这有点令人惊讶。 (3认同)

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:假设上游是原始回购,而原始是您的副本。