git: 重置为分叉存储库的初始状态
git: Reset to initial state of forked repository
我在我的本地命名空间中创建了一个存储库(其中有一个 master
分支)。
从那以后,我在 master
之上进行了几次提交,并且我还有一个额外的分支 (test-branch
)。
我要执行的是:
- 将
master
分支回滚到我分叉 repo 时的状态
- 保持
test-branch
原样
解决此问题的一种可能方法是检查 master
、查看日志历史记录、找到不是我的最后一次提交的 sha
并执行 git reset <sha_of_last_commit_of_forked_repo>
。
有其他方法吗?
仅供参考,我已经配置了两个 remotes
:origin
和 upstream
(上游是我从 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",您应该标记它。
我在我的本地命名空间中创建了一个存储库(其中有一个 master
分支)。
从那以后,我在 master
之上进行了几次提交,并且我还有一个额外的分支 (test-branch
)。
我要执行的是:
- 将
master
分支回滚到我分叉 repo 时的状态 - 保持
test-branch
原样
解决此问题的一种可能方法是检查 master
、查看日志历史记录、找到不是我的最后一次提交的 sha
并执行 git reset <sha_of_last_commit_of_forked_repo>
。
有其他方法吗?
仅供参考,我已经配置了两个 remotes
:origin
和 upstream
(上游是我从 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",您应该标记它。