【问题标题】:Git - After resetting to a specific commit, what is the next step?Git - 重置为特定提交后,下一步是什么?
【发布时间】:2016-06-17 00:11:59
【问题描述】:

我是 Git 新手,并且陷入了是否提交的情况。所以这可能是一个基本问题。我试图找到很多关于此的信息,但没有找到任何特定于我关注的答案。所以在这里问。

我的分支有 15 次提交。现在,由于一个问题,我已重置为我的第一次提交。 然后我进行了涵盖所有提交更改的更改。

现在我的问题是我可以直接提交我的更改吗?它会保存在其他提交的顶部吗?其他提交及其历史会发生什么。我是否需要删除历史记录? 或者我只需要提交更改,我的分支就可以合并了? 或者在我标记我的最终提交之前是否涉及任何额外的步骤?

【问题讨论】:

  • 请说明您是如何恢复到第一次提交的。在谈到 git 时,revert 具有特殊的含义,因为 git revert。但是有 15 次提交,我怀疑这就是你实际所做的。
  • 我使用源树。在那里我选择了第一个提交。右键单击它并选择选项:将当前分支重置为此提交。
  • 你的意思是,Reset current branch to this commit? “重置”和“恢复”是两个不同的东西。
  • 是的,编辑了评论。抱歉弄错了。
  • 阅读本文以了解如何在 revert:stackoverflow.com/questions/34519665/… 之后修复您的 HEAD

标签: git atlassian-sourcetree git-commit git-reset


【解决方案1】:

当你重置一个分支时,它会移动分支指针而不改变你的提交。你从这里开始:

first commit                       branch name
|                                   |
* -- * -- * -- * -- * ... * -- * -- *

到这里:

branch name
first commit
|
* -- * -- * -- * -- * -- * -- * -- * ...

您的所有其他提交仍然存在,但您不再基于它们。您可以提交您的更改。它将根据您的第一次提交进行新的单独提交。像这样:

first commit
|
* -- * -- * -- * -- * -- * -- * -- * ...
 \ branch name
  \|
   *

【讨论】:

  • 感谢您的回答。这很有帮助。所以投了票。但是这个提交会在其他提交之上吗?那么其他提交的历史呢?
  • 不,此提交将在第一个提交之上,即当前位于您工作目录中的那个。其他提交仍然存在,但不容易访问,因为您没有任何分支或标签指向它们。我对源代码树不太熟悉,但我知道您可以使用 git-reflog 找到它们。您可能需要使用 git-cherry-pick 来解决问题。目前尚不清楚您要做什么。你想“编辑”你的第一个提交,同时保留其他 14 个?
  • 我已重置为我的第一次提交并进行了涵盖所有 14 次提交信息的更改。所以理想情况下,我现在不需要这 14 次提交。我已经解决了这个问题。我想提交这个,以便我可以继续合并。但在合并之前想先澄清这些事情。这样我就可以继续了。
  • 如果您不需要这 14 次提交,则无需合并。只需运行一个普通的 git commit,你就会遇到我在上面的答案中描述的情况(在底部)。
  • 没有。你能正确地理解我。目前我正在我的本地分支上工作,现在需要与开发分支合并。所以我认为有一个错误的提交,因为我无法将我的分支与开发分支合并。由于问题现在已经解决,我处于这种提交将直接引导我进行合并活动的情况。还是在提交更改之前我必须遵循一些其他步骤?诸如 fetch pull 之类的东西。
【解决方案2】:

根据您在 mkasberg 的回答中的 cmets,听起来您重置的提交已已被推送到远程存储库。如果是这种情况,那么重置为较早的提交并不是解决问题的正确方法。

我建议将当前状态下的所有文件的副本保存到工作副本之外的位置。然后,重置您的工作副本,以便再次包含所有这 15 个提交。然后用您制作的备份覆盖您的工作副本,然后提交。

【讨论】:

  • 感谢 Thelr 的回复。我也通过保留历史来解决它。
猜你喜欢
  • 2021-08-12
  • 2015-02-26
  • 2015-05-20
  • 2021-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-25
  • 2014-07-07
相关资源
最近更新 更多