在我的项目中,其中一个提交引入了一个我无法找到的错误。我想忽略其中的所有内容并继续其他提交。
提交1 :工作正常。
提交2 :不起作用。介绍了一个错误。
Commit3 :由于提交2上的错误而无效。
我的问题是如何在没有在提交2中进行更改的情况下签出提交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
。