【问题标题】:git going back couple of commits on a branchgit 在一个分支上返回几个提交
【发布时间】:2011-08-12 16:19:57
【问题描述】:

我对 git 很陌生,我检查了几个类似的问题,但是,我看到的问题略有不同,而且我对它们没有深入了解,所以我发布了我自己的问题。

我是我项目的唯一开发人员。我喜欢经常试验我的代码,所以我认为使用版本控制系统会有所帮助。我有一个 master 分支,以及一个我正在开发的具有新功能的分支。分支出来后,我在功能分支上做了一些我想保留的提交,还有一些我想丢弃的提交。与此同时,如果相关的话,主人完好无损。我想找到一种方法来了解我应该返回功能分支的提交次数,并找到一种方法来进行该提交。我可以通过查看提交消息来理解它,但是我不知道在哪里可以看到它们。

【问题讨论】:

  • 你想保持原来的特性分支吗?还是可以删除不需要的提交?

标签: git git-branch


【解决方案1】:

因为你是一个人工作,最简单的方法(同时也保持你的历史干净)是:

git reset --hard <commit hash of the commit before the commits you want to discard>

要获取哈希,请使用git log(或git log --pretty=oneline

或执行git rebase -i &lt;hash as above&gt; 并删除代表您要删除的提交的行并执行变基。

如果您想保留历史记录(以及如果您与其他人一起工作、被推送到远程等)git revert 是更安全的解决方案。

【讨论】:

    【解决方案2】:

    您有几个选择。如果您想放弃更改,我建议您使用git revert。 Revert 有点像撤消工作;它基本上执行撤消现有提交的提交。这样做的好处是,如果您稍后再次改变主意,您可以恢复恢复!

    如果您想恢复多个提交,听起来像是您想要的,语法如下所示:

    git revert branchname~5..branchname~3
    

    这会将第 5 次最后提交还原为第 3 次最后提交。 git revert 将立即提交还原。如果您想在提交之前查看它会做出的更改;然后你可以指定--no-commit,然后使用git commit自己提交。

    您还可以像这样还原单个提交:

    git revert branchname~5
    

    如果您想查看到目前为止所做的所有提交,可以使用git log

    最后,使用git log 你可以看到提交哈希。 git-revert 也可以接受一个哈希,所以你不必计算它有多少修订。

    git revert sha1hashhere
    

    【讨论】:

    • 我阅读了日志并决定我需要返回 12 次提交,我应该发出“git revert branchname~12..branchname~0”吗?
    【解决方案3】:

    如果您可以删除不需要的提交

    1. 找到两人的共同父母。 如果你知道你想去很远的地方,你可以跳过这一步。
      git merge-base featureBranch masterBranch
    2. 检查您的功能分支
      git checkout featureBranch
    3. 重新设置该分支的基础,删除您不想要的提交(当您的编辑器弹出时删除包含您不需要的提交的行。
      git rebase -i sha_from_step_1 或者您可以使用 git rebase -i HEAD@{n} 其中 n 是您回溯多远想去。
    4. 合并到master
      git merge master

    【讨论】:

      【解决方案4】:

      一个commit back = HEAD^

      两次提交 = HEAD^^

      阅读地图“man gitrevisions”

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-11-28
        • 2013-12-12
        • 2015-01-06
        • 2016-03-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多