在本地回购中,我刚刚执行git cherry-pick SHA
而没有任何冲突或问题。然后我意识到我不想做我刚刚做的事情。我没有把它推到任何地方。
如何删除这个樱桃酱?
我想知道是否有办法做到这一点:
如果可能,最好使用一个命令用于两种情况。
答案 0 :(得分:88)
cherry-pick基本上是一个提交,所以如果要撤消它,你只需撤消提交。
当我有其他本地更改时
存储您当前的更改,以便在重置提交后重新应用它们。
$ git stash
$ git reset --hard HEAD^
$ git stash pop # or `git stash apply`, if you want to keep the changeset in the stash
当我没有其他本地更改时
$ git reset --hard HEAD^
答案 1 :(得分:12)
要撤消上次提交,只需执行git reset --hard HEAD~
。
修改:此答案适用于未提及保留本地更改的问题的早期版本;蒂姆接受的答案确实是正确的答案。感谢qwertzguy的提醒。
答案 2 :(得分:4)
如果可能,请避免硬重置。硬重置是git中极少数破坏性操作之一。幸运的是,你可以撤销一个没有重置的樱桃选择,并避免任何破坏性的。
请注意要撤消的樱桃选择的哈希,说它是${bad_cherrypick}
。做git revert ${bad_cherrypick}
。现在你的工作树的内容就像你的糟糕挑选之前一样。
重复你的git cherry-pick ${wanted_commit}
,当你对新樱桃选择感到满意时,请执行git rebase -i ${bad_cherrypick}~1
。在rebase期间,删除${bad_cherrypick}
及其相应的还原。
你正在研究的分支只有好的樱桃选择。不需要重置!
答案 3 :(得分:2)
面对同样的问题,我发现如果你已经提交和/或推送到远程,因为你成功的挑选,并且你想删除它,你可以通过运行找到樱桃选择的SHA:
git log --graph --decorate --oneline
然后,(在使用:wq
退出日志后),您可以使用
git rebase -p --onto YOUR_SHA_HERE^ YOUR_SHA_HERE
其中YOUR_SHA_HERE
等于樱桃挑选的提交的40个或缩写为7个字符的SHA。
首先,您无法推送您的更改,因为您的远程仓库和本地仓库将具有不同的提交历史记录。您可以强制您的本地提交使用
替换遥控器上的内容 git push --force origin YOUR_REPO_NAME
(我从Seth Robertson改编了这个解决方案:参见"删除整个提交。")
答案 4 :(得分:1)
git reflog
可以帮你解救。
在您的控制台中键入它,您将获得一个git历史列表以及代表它们的SHA-1。
只需检查您要恢复的任何SHA-1
答案 5 :(得分:1)
一个命令并且不使用破坏性git reset
命令:
GIT_SEQUENCE_EDITOR="sed -i 's/pick/d/'" git rebase -i HEAD~ --autostash
它只是放弃了提交,即使你有本地更改,也会让你回到樱桃选择之前的状态。
答案 6 :(得分:-3)
git cherry-pick --abort
是你的救世主。