Git还原2次提交,其中1次被合并

时间:2020-11-11 14:28:17

标签: git

我正尝试还原2次提交,第一个是合并提交,第二个是普通提交。

我遇到的问题是正常的git revert,而没有使用-m不适用于合并提交。在获得该选项的地方,它仅考虑上一次合并提交,但我想还原回2个提交。

所以,这是当前结构:

commit HASH_ONE(HEAD -> Release_Stage, origin/Release_Stage)
Merge: merge_hash_one merge_hash_two
Author: 
Date:   

    resolving merge conflict Branch_name

commit HASH_TWO(origin/PSP-8392, PSP-8392)
Author: 
Date:   

    adding comment during kyc upload

commit HASH_THREE (origin/Release, origin/PSP-8594, Release)
Merge: merge_hash_one merge_hash_two
Author: 
Date:   

    Merged in PSP-6887_new (pull request #411)

    some commit message

因此,在这里我只想使用git revert来返回HASH_THREE,因为我不能强制执行。

1 个答案:

答案 0 :(得分:0)

如果您要做的就是在HASH_ONE上创建一个新修订,使项目的内容像在HASH_THREE中一样,则可以很容易地做到:

git checkout HASH_THREE # assuming that it is a revision ID... if it is a branch, use --detach so that it doesn't move
git reset --soft HASH_ONE
# all changes between HASH_ONE an HASH_THREE (moving backwards) will be in index ready to be committed
git commit -m "reverting to HASH_THREE"
# now you have a single revision on top of HASH_ONE that is taking you back to the content of HASH_THREE
# feel free to put a branch here and then check it out
git branch -f some-branch
git checkout some-branch

另一种相当简单的方法是使用每天都不使用的命令:

git branch -f temp $( git commit-tree -p HEAD -m "Reverting to HASH_THREE" HASH_THREE^{tree} )

这将在以您当前分支为父分支的新修订版上创建一个临时分支,该修订版的内容与HASH_THREE相同。然后,您可以合并该分支,以便您的分支移动到那里:

git merge temp

完成后,可以随时删除temp分支。