git: 重置为分叉存储库的初始状态

git: Reset to initial state of forked repository

我在我的本地命名空间中创建了一个存储库(其中有一个 master 分支)。

从那以后,我在 master 之上进行了几次提交,并且我还有一个额外的分支 (test-branch)。

我要执行的是:

解决此问题的一种可能方法是检查 master、查看日志历史记录、找到不是我的最后一次提交的 sha 并执行 git reset <sha_of_last_commit_of_forked_repo>

有其他方法吗?

仅供参考,我已经配置了两个 remotesoriginupstream(上游是我从 push 分叉出来的 repo)。

你可以用上游主机硬重置你的本地。

$ git checkout master

$ git fetch upstream                 # update local upstream history but not merged with working tree
$ git reset --hard upstream/master   # replace local 'master' history = upstream/master history

现在,您可以从 master.

创建并签出新分支 test-branch
$ git checkout -b test-branch

你提到上游已经发展。你也说没关系,但只是让你知道选项:

您可以找到上次将来自上游的更改集成到您的代码中的时间 - 这可能是您最初创建分支的时间(即,如果您没有合并其他上游更改或重新调整您的工作)。

git merge-base master upstream/master

然后您可以重置为该命令的结果

git reset --hard `git merge-base master upstream/master`

如果您已经重新调整您的工作或合并其他更改,那么您可能已经到了git无法跟踪的地步叉子的 "original" 状态;这不是 git 认为重要的东西,因为就 git 而言,你的叉子只是上游的另一个克隆。

因此,为了将来参考,如果您创建了一个分支,并且您认为您以后可能需要参考 "the last upstream commit when I forked",您应该标记它。