跳过提交并在Git中

时间:2017-06-02 12:06:05

标签: git version-control bitbucket

在我的项目中,其中一个提交引入了一个我无法找到的错误。我想忽略其中的所有内容并继续其他提交。

提交1 :工作正常。

提交2 :不起作用。介绍了一个错误。

Commit3 :由于提交2上的错误而无效。

我的问题是如何在没有在提交2中进行更改的情况下签出提交3?

3 个答案:

答案 0 :(得分:2)

与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轻松完成。这适用于简单操作,例如还原和樱桃。

从Git开始时的最后一条建议: 你可能会做错事并弄乱你的工作区,你可以随时回到以前的状态,只要它在提交中被版本化,使用:

git reflog
//locate your commit and copy the sha key
git reset --hard mykey

知道这一点,在玩这些命令时不要犹豫,只要你不推,你就安全了;)

答案 1 :(得分:1)

如果这是未按下的历史记录,您可以使用git rebase --onto commit1 commit2 commit3从历史记录中删除commit2。如果这已经是已发布的历史记录,则只需使用git revert commit2还原commit2中的更改。或者,如果您只想在本地临时拥有它,则可以签出commit3然后执行git revert commit2 -n,这也会撤消更改,但不会创建提交。

答案 2 :(得分:0)

您可以使用互动式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