首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多次使用revert回滚到旧提交

多次使用revert回滚到旧提交
EN

Stack Overflow用户
提问于 2011-01-18 01:35:58
回答 2查看 13.1K关注 0票数 12

我想使用git revert回滚到提交,这样我就可以保留历史记录。有没有一种更简单的方法来做到这一点,而不是对我想要还原的每个提交散列运行git revert?有没有更快的方法从一个特定的提交一直恢复到另一个提交哈希?

在手册页上,他们指出您可以执行类似以下git revert -n master~5..master~2的操作,但当我尝试执行此操作时,收到以下错误:fatal: Cannot find 'master~5..master~2'

EN

回答 2

Stack Overflow用户

发布于 2011-01-18 02:19:00

git revert应该接受一次提交,这样错误就是抱怨你给了它一个修改列表,而它需要一个修改。(更新:感谢指出,从1.7.2开始,git revert实际上可以接受多次提交。)我将在下面提出三种可能的行动方案:

创建多个还原提交

我不确定你是否可以在一个命令中做到这一点,但如果你知道db0bc是最后一个好的提交(即你想在那之后恢复每次提交),并且历史是线性的,你可以这样做:

代码语言:javascript
复制
for s in $(git rev-list --reverse db0bc..)
do
    git revert --no-edit $s
done

直接回到旧状态,但仍然在一个分支上

另一方面,如果你只关心历史记录在那里,你总是可以让下一次提交成为上一次良好提交db0bc时源树的状态,而不会引入revert commits -你仍然会有在那时和你的新提交之间引入的历史记录,但是没有太多的revert提交。此外,如果历史是非线性的,这也不会有问题:

代码语言:javascript
复制
# Check that "git status" is clean:
git status

# Set the index (staging area) to be as it was at commit db0bc:
git read-tree db0bc

# Create a commit based on that index:
git commit -m "Going back to the state at commit db0bc"

# Your working tree will still be as it was when you started, so
# you'll want to reset that to the new commit:
git reset --hard

为旧提交创建一个新分支

如果你是这个项目的唯一工作人员,或者你还没有推过master,或者你知道重置你的master分支不会产生问题,你可以采取另一种策略,在你当前的位置创建一个新的分支,然后重置master,就像github's "undoing" page上很好地描述的那样。简而言之,你可以这样做:

代码语言:javascript
复制
# Make sure you're on master:
git checkout master

# Check that "git status" is clean, since later you'll be using "git reset --hard":
git status

# Create a new branch based on your current HEAD:
git branch unwanted-work

# Reset master back to the last good commit:
git reset --hard db0bc

我认为,github页面上的图表让这一切变得很好和清晰。

票数 22
EN

Stack Overflow用户

发布于 2011-01-18 03:37:48

我认为最自然的方法是(假设你有一个干净的工作副本):

git reset --hard $lastnicecommit; git merge -s ours @{1}

然后使用git commit --amend添加一些描述。(在更新版本的git中,git-merge已经可以让你指定一个描述。)

(@{1}只是指在重置之前您的分支指向的提交。)

这是一个快进的变化,因此完整地记录了历史。尽管如此,由于$lastnicecommit没有引入任何更改,所以在提交中引入的更改。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4716051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档