案例:
提交历史为:
A -> B -> C -> D
我希望将具有历史记录的当前分支上的当前工作目录重置为B:
A -> B -> C -> D -> E
树的结果与B
相同,这意味着
git diff B..E --name-only
应返回空列表。
一种愚蠢的方法是:
# we assume current work directory is `tree`, and branch is `master`
# and work directory HEAD at `D`
# reset HEAD to D
cd tree
git checkout -f D
# create a copy work directory
cd ..
rm -rf copy
cp -r tree copy
# clean old work directory
rm -rf tree
mkdir tree
cp -r copy/.git tree/.git
# reset copy directory to revision `B`
cd copy
git checkout -f B
# copy tree from copy directory to tree
rm -rf .git
cp -r ./.* ./* ../tree
# commit changes, current revision is we wanted `E`
git add .
git ci -m 'revert to commit B'
有简化的方法吗?
答案 0 :(得分:0)
只需还原中间提交:
git revert D C
然后您可能需要压缩结果提交。
答案 1 :(得分:0)
提交B中的检出文件
git checkout B -- .
您可以看到B和D的变化
git diff HEAD
然后提交