2

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

我修改了一些东西,然后向原始仓库发出了拉取请求。

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

我试过了

git fetch 上游 git 合并上游/master

同时对原始仓库所做的更改会同步到我的 fork ,但我所做的更改仍保留在我的 fork 中

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

4

1 回答 1

4

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

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

git remote add upstream http://github.com/original.git
git fetch upstream
git reset --hard upstream/master
git push -f origin master

现在 master 将在两个 repos 中的相同位置。当您进行合并时,您要么向前移动引用(称为快进合并),因为您身边不存在任何东西,要么您进行新的提交,因为两者都有更改。如果你想丢弃你的提交,重置是这里的答案——而不是合并。

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

git push -f . upstream/feature1:feature1
git push -f origin feature1

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

于 2012-10-31T18:13:16.683 回答