【发布时间】:2019-06-13 23:40:33
【问题描述】:
由于 SSD 故障,我的专用服务器在一天前崩溃了。托管公司将我的服务器恢复为 2 天前的备份。
构建中的 git 现在将当前更改与 2 天前的更改进行比较,并将新创建的文件跟踪为 deleted。如何将服务器上的构建重新同步到 git 上的最新构建?
【问题讨论】:
由于 SSD 故障,我的专用服务器在一天前崩溃了。托管公司将我的服务器恢复为 2 天前的备份。
构建中的 git 现在将当前更改与 2 天前的更改进行比较,并将新创建的文件跟踪为 deleted。如何将服务器上的构建重新同步到 git 上的最新构建?
【问题讨论】:
按照您提到的操作顺序,如果您在这 2 天内对 master 分支进行了一些额外的修改,则您已将它们从 master 分支中删除。
幸运的是,如果是这种情况,您仍然可以从本地 repo 中找到您的提交:
运行git reflog master
您应该会看到如下输出:
110f738 (HEAD -> master, bare/master) master@{0}: reset: moving to origin/master
224e68f master@{1}: commit: **commit message** # <- this commit
1a58e62 master@{2}: commit: **commit message**
...
您可以使用出现在 reset: moving to origin/master 行之前的提交的哈希
例如运行:
# assuming you are on your local 'master' branch :
# re-set master to its previous state :
git reset 224e68f
# push it to your server :
git push origin master
【讨论】:
一个非破坏性的动作序列是:
获取所有更改:
git fetch --all
更新远程主分支:
git push origin master
更新任何其他相关分支:
git push origin my/feature1
git push origin my/bugfix
【讨论】:
以下解决了我的问题(考虑到 master 是你的分支):
首先获取所有更改:
git fetch --all
然后重置master:
git reset --hard origin/master
拉取/更新:
git pull origin/master
【讨论】: