我已发送PR并将其合并到存储库。假设PR没有。是127并且PR按顺序包含以下提交(最近的第一个)
hdyw6
cnsfg
然后我发了另一个PR没有。 128其中有以下提交
6dwiu
sbyww
(假设PR第126号中只有一个提交,即提交jdus7
)
现在我意识到错误得到了提交,现在我想在PR 127之前将存储库带回舞台。这意味着我要保持提交直到jdus7
(那是在公关号126)
那怎么做?
我是否必须逐一恢复提交(从最近开始),类似这样的事情?
git revert sbyww
git revert 6dwiu
git revert cnsfg
git revert hdyw6
现在终于所有糟糕的提交都消失了?请纠正我,如果它不起作用或更好的方法吗?
或者有些东西不是一个接一个地回复我只是说git reset back till jdus7
答案 0 :(得分:0)
git reset --hard jdus7
git revert
用于另一件事(引入新的提交还原先前提交的更改)。
答案 1 :(得分:0)
如果您只想彻底清除当前分支中的某些内容,那么您可能需要
git reset --hard jdus7
这会使指定的jdus7
ID成为新的HEAD
。命令git revert
(如您所见)将在您正在恢复的提交之上创建一系列新提交。这可能会造成丑陋的历史,并为未来的承诺留下潜在的地雷。
如果还原提交,那么将不会合并该提交的任何更改。因此,如果您还原提交123456
,然后运行git merge 123456
,它实际上不会合并任何内容。这可能真的令人困惑。为了引入更改,您必须找到由git revert 123456
生成的还原提交,然后还原该提交。
但请注意,如果您使用git reset --hard
,则无法再从当前分支访问已删除的提交。使用git revert
时,它们仍将存在,以及还原提交。
答案 2 :(得分:0)
如果分支仅为本地分支,则可以git reset --hard jdus7
但是,如果提交已被推送到远程分支,这只会将您移回本地并且实际上不会删除提交(除非您执行git push -f
但是如果您是唯一的人,则应该只执行此操作使用遥控器,因为它会弄乱人们的历史)
您可以创建"多次提交还原"使用此命令:
git diff HEAD..jdus7 --name-only | xargs git checkout jdus7 --
这将获取已更改的文件,并从您想要的状态中检出它们。然后,您可以提交这些更改,并将所有内容还原为您想要的提交。