【发布时间】:2020-05-26 08:22:42
【问题描述】:
我有分支master 和devel。
如果我需要恢复其中的信息,然后将devel 的头部重置为master 的头部(不修改master )。
以下是正确的方法吗?
git checkout devel
git checkout -b devel-save
git push
git checkout devel
git reset --hard master
git push --force
【问题讨论】:
-
您也可以将主分支提交推送到具有“devel”名称的远程。保存特定分支也可以这样做(尽管我可能会使用标签)。然后在本地更新到远程分支以根据需要进行同步,和/或在当前无用的情况下核对本地分支。确保传达主线分支的强制更新。
-
@user2864740 但我的方式是对的。如果按照问题中的描述执行此操作,是否可以确定不会丢失数据?
-
只要有一个分支(或标签)指向一个提交,Git 就不会“丢失数据”——该提交和所有祖先都将持续存在。这是通过
devel-save为devel实现的。 -
我可能会这样做:
git tag devel-save devel; git checkout devel; git reset --hard master; git push --force。如果希望它确保远程可用,请不要忘记推送devel-save标签/提交。 -
此外,Git 保留了大量历史记录(参见
reflog),因此在 Git 执行“垃圾压缩”之前,即使是未命名的提交也不会真正丢失该提交被删除。默认情况下,即使是这样的孤立提交也会保留一个月。删除 git 存储库,或以其他方式破坏,不在 git 的控制范围内。