我想使用git revert回滚到提交,这样我就可以保留历史记录。有没有一种更简单的方法来做到这一点,而不是对我想要还原的每个提交散列运行git revert?有没有更快的方法从一个特定的提交一直恢复到另一个提交哈希?
在手册页上,他们指出您可以执行类似以下git revert -n master~5..master~2的操作,但当我尝试执行此操作时,收到以下错误:fatal: Cannot find 'master~5..master~2'
发布于 2011-01-18 02:19:00
git revert应该接受一次提交,这样错误就是抱怨你给了它一个修改列表,而它需要一个修改。(更新:感谢指出,从1.7.2开始,git revert实际上可以接受多次提交。)我将在下面提出三种可能的行动方案:
创建多个还原提交
我不确定你是否可以在一个命令中做到这一点,但如果你知道db0bc是最后一个好的提交(即你想在那之后恢复每次提交),并且历史是线性的,你可以这样做:
for s in $(git rev-list --reverse db0bc..)
do
git revert --no-edit $s
done直接回到旧状态,但仍然在一个分支上
另一方面,如果你只关心历史记录在那里,你总是可以让下一次提交成为上一次良好提交db0bc时源树的状态,而不会引入revert commits -你仍然会有在那时和你的新提交之间引入的历史记录,但是没有太多的revert提交。此外,如果历史是非线性的,这也不会有问题:
# 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上很好地描述的那样。简而言之,你可以这样做:
# 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页面上的图表让这一切变得很好和清晰。
发布于 2011-01-18 03:37:48
我认为最自然的方法是(假设你有一个干净的工作副本):
git reset --hard $lastnicecommit; git merge -s ours @{1}
然后使用git commit --amend添加一些描述。(在更新版本的git中,git-merge已经可以让你指定一个描述。)
(@{1}只是指在重置之前您的分支指向的提交。)
这是一个快进的变化,因此完整地记录了历史。尽管如此,由于$lastnicecommit没有引入任何更改,所以在提交中引入的更改。
https://stackoverflow.com/questions/4716051
复制相似问题