【问题标题】:Git: How to reset devel to master?Git:如何将开发重置为大师?
【发布时间】:2020-05-26 08:22:42
【问题描述】:

我有分支masterdevel

如果我需要恢复其中的信息,然后将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-savedevel实现的。
  • 我可能会这样做:git tag devel-save devel; git checkout devel; git reset --hard master; git push --force。如果希望它确保远程可用,请不要忘记推送devel-save 标签/提交。
  • 此外,Git 保留了大量历史记录(参见 reflog),因此在 Git 执行“垃圾压缩”之前,即使是未命名的提交也不会真正丢失该提交被删除。默认情况下,即使是这样的孤立提交也会保留一个月。删除 git 存储库,或以其他方式破坏,不在 git 的控制范围内。

标签: git branch git-reset


【解决方案1】:

如果按照问题中的描述执行此操作,是否可以确定不会丢失数据?

不会丢失任何数据。

你也可以直接推送develop:git push develop:old-develop,然后重置master并强制推送。
评论中提到的reflog
在 GitHub 方面,您有一个 poor man reflog,它可以让您找回已删除的历史记录。但是在您的情况下,该历史记录将是可见的并可以参考(在新的分支名称下)。

【讨论】:

  • 如果我的方式可能导致任何数据丢失,您还没有回答。
  • 我以为我有,我回答的第一句话。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多