繁体   English   中英

跳过提交并在Git中

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM