github fork 从原始存储库中获取所有更改

Mat*_*zzi 3 git version-control fork github

昨天我在 github 上做了我的第一个 fork。

我修改了一些内容,然后向原始存储库发出了拉取请求。

然后我发现我做错了,现在我想将我的分支同步到原始存储库,以便我所做的所有更改(创建新文件,修改一些..)都将被删除。

我尝试过

git fetch 上游 git merge 上游/master

同时对原始存储库所做的更改会同步到我的叉子,但我所做的更改仍保留在我的叉子中

我希望我的存储库与原始存储库相同。

Ada*_*ruk 5

您可以通过向原始存储库添加遥控器来修复您的分叉,从那里获取,重置分支以匹配拉出的分支,然后强制将分支推送到您的分叉。

假设您的分叉存储库由 origin 表示,下面是一个示例,其中 master 作为您拥有的唯一分支:

git remote add upstream http://github.com/original.git
git fetch upstream
git reset --hard upstream/master
git push -f origin master
Run Code Online (Sandbox Code Playgroud)

现在 master 将位于两个存储库中的同一位置。当您进行合并时,您要么向前移动引用(称为快进合并),因为您这边不存在任何内容,要么进行新的提交,因为两者都发生了更改。如果你想放弃你的提交而不是合并,那么重置就是答案。

如果您有其他分支想要重置回它们在初始存储库上的位置,您可以在不检查它们的情况下执行此操作:

git push -f . upstream/feature1:feature1
git push -f origin feature1
Run Code Online (Sandbox Code Playgroud)

所说.的在同一个仓库中推送。这是一种无需检出分支即可移动分支指针的巧妙方法。Push 中的冒号语法表示<source>:<destination>. 如果:<destination>省略,则意味着相同的名称,这就是为什么您不经常看到带有推送示例的语法的原因。一个更常见的示例是,当您将本地分支推送到具有不同名称的远程分支时:git push origin myexperiment:dev会将远程上的 dev 分支更新为 myexperiment 指向的内容。