【问题标题】:Revert many commit after the creation of a branch创建分支后恢复许多提交
【发布时间】:2024-01-08 10:13:01
【问题描述】:

我正在使用 git 来管理我的项目,但我对这类程序的经验并不多,所以我经常不正确地使用它们(例如:我只在一次提交中提交了许多(不相关的)更改)。我正在尝试更好地使用它们。

顺便说一句,我注意到我开始开发我的项目的扩展,这将更适合分支。因此,我从 git gui 创建了一个新分支,它是 master 的副本。 现在我想将 master 恢复到我所做的最后一次提交,它与项目无关。我知道这个提交是什么,但我不知道如何将所有从 HEAD 的提交还原到这个提交,而且我不知道这是否会影响分支(失去所有新工作真的很痛苦..)

那么,我该怎么办?

Ps:平时我用的是 git gui,但是我用 git bash 没问题。我使用win7,我在eclipse中管理一个java android项目

【问题讨论】:

    标签: git git-branch git-revert


    【解决方案1】:

    master 分支的更改不会影响新分支的历史记录。

    如果您想将master 的 HEAD 更改为特定提交,请使用 reset

    git checkout master
    git reset --hard <commit id>
    

    如果你的事件顺序是:

    1. 做出重大改变。
    2. 创建新分支。

    而您只想将master 恢复到上一次提交之前,请使用reset

    git checkout master
    git reset --hard HEAD^
    

    如果你的事件顺序是:

    1. 做出重大改变。
    2. 提交其他更改(应保留在master)。
    3. 创建新分支。

    而您只想从master 中删除big change 提交,同时保持所有其他提交不变,请使用revert

    git checkout master
    git revert <commit id>
    

    如果你的事件顺序是:

    1. 做出重大改变。
    2. 提交其他更改(也应从master 中删除)。
    3. 创建新分支。

    如果您想从master 中删除所有最近的提交,包括big change,请使用reset

    git checkout master
    git reset --hard <big change commit id>^
    

    【讨论】:

    • 精彩的解释,我相信你会得到很多 +1。很难决定接受的答案,但这次我选择了另一个,因为它更简洁
    【解决方案2】:

    如果您创建了分支,请改回主分支并使用git reset --hard commitid 将其重置为所需的提交。现在 'master' 设置为此提交,并且分支仍然指向您之前为其配置的提交。

    分支名称是特定提交的引用或备用名称。 reset 允许您更改参考指向的提交并强制工作树匹配(使用--hard)

    【讨论】:

    • 正是我需要的!谢谢
    • 顺便说一句,当我将 master 与分支合并时,因为在还原后我修改了代码,并且也希望在分支中进行此修改,我不会丢失从 ,对吗?