[英]Skip a commit and in Git
在我的项目中,其中一个提交引入了一个我无法找到的错误。 我想忽略其中的所有内容并继续其他提交。
Commit1 :工作正常。
Commit2 :不起作用。 介绍了一个bug。
Commit3 :由于提交2上的错误而无法工作。
我的问题是如何在没有在提交2中进行更改的情况下检出提交3?
像Git中的大多数操作一样,您可以使用以下几种方法来完成:
恢复错误的提交
git revert <commit2>
如果这个错误的提交没有被推送到远程服务器(否则你最好还原并立即推送来修复它!=),并且你想让你的工作保持在某个地方并在以后修复它,你也可以创建一个新的本地分支, cherrypick正确的提交并继续你的工作
git checkout -b "myNewBranch" <commit1> git cherry-pick <commit3>
如果你有多个提交樱桃选择,rebase更方便
###create your branch but do not check it out yet. git branch "myNewBranch" <commit1> git rebase <commit2> --onto "myNewBranch"
这将从commit2(排除)开始所有提交,并在您的新分支上逐个应用它们。
如果你对git命令行不熟悉并使用gui,你可以使用gitk轻松完成。 这将适用于简单的操作,如还原和cherrypicks。
最后一条建议,从Git开始:你可能会做错事并弄乱你的工作区,你可以随时回到以前的情况,一旦它在提交中被版本化,使用:
git reflog
//locate your commit and copy the sha key
git reset --hard mykey
知道了这一点,在玩命令时不要犹豫,只要你不推,你就安全了;)
如果这是未刷新的历史记录,您可以使用git rebase --onto commit1 commit2 commit3
commit3从历史记录中删除commit2。 如果这已经是已发布的历史记录,那么您应该使用git revert commit2
从commit2 git revert commit2
。 或者如果你只想在本地临时拥有它,你可以检查commit3然后执行git revert commit2 -n
,它也撤消更改但不创建提交。
您可以使用交互式rebase从提交历史记录中删除commit2
。 详细步骤如下(假设3个提交在master
分支上):
git checkout master
git rebase -i HEAD~3
然后会显示交互式窗口。 输入i
并将其更改为:
pick <commit1 sha-1> commit1 message
drop <commit2 sha-1> commit2 message
pick <commit3 sha-1> commit3 message
然后输入Esc按钮并输入:wq
。
现在, commit2
被删除,你会发现commit3
的更改基于commit1
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.