如何撤消成功的" git cherry-pick"?

时间:2015-06-22 17:38:27

标签: git

在本地回购中,我刚刚执行git cherry-pick SHA而没有任何冲突或问题。然后我意识到我不想做我刚刚做的事情。我没有把它推到任何地方。

如何删除这个樱桃酱?

我想知道是否有办法做到这一点:

  • 当我有其他本地更改时
  • 当我没有其他本地更改时

如果可能,最好使用一个命令用于两种情况。

7 个答案:

答案 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

是你的救世主。