Git命令重置为先前的提交而不会丢失提交

时间:2018-11-22 08:13:30

标签: git

案例:

提交历史为:

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'

有简化的方法吗?

2 个答案:

答案 0 :(得分:0)

只需还原中间提交:

git revert D C

然后您可能需要压缩结果提交。

答案 1 :(得分:0)

提交B中的检出文件

git checkout B -- .

您可以看到B和D的变化

git diff HEAD

然后提交