跳过提交并在 Git
Skip a commit and in Git
在我的项目中,其中一个提交引入了一个我找不到的错误。我想忽略其中的所有内容并从其他提交继续。
Commit1:工作正常。
Commit2:不起作用。引入了一个错误。
Commit3:由于提交 2 上的错误而无法工作。
我的问题是如何在不更改提交 2 的情况下检出提交 3?
如果这是未推送的历史记录,您可以使用 git rebase --onto commit1 commit2 commit3
从历史记录中删除 commit2。如果这已经是已发布的历史记录,您应该使用 git revert commit2
恢复 commit2 的更改。或者,如果您只想在本地临时拥有它,您可以签出 commit3 然后执行 git revert commit2 -n
这也会撤消更改但不会创建提交。
与 Git 中的大多数操作一样,您可以使用多种方法来完成:
还原错误的提交
git revert <commit2>
如果这个错误的提交没有被推送到远程服务器(否则你最好恢复并立即推送以修复它!=),并且你想将你的工作保留在某个地方并稍后修复它,您还可以创建一个新的本地分支,挑选正确的提交并继续您的工作
git checkout -b "myNewBranch" <commit1>
git cherry-pick <commit3>
如果你有不止一个 commit 到 cherry-pick,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
知道了这些,玩命令的时候就不要犹豫了,只要不push就安全了;)
您可以使用 interactive rebase 从提交历史 中删除 commit2
。详细步骤如下(假设 3 次提交在 master
分支上):
git checkout master
git rebase -i HEAD~3
然后会有互动展示window。输入 i
并将那里的提交更改为:
pick <commit1 sha-1> commit1 message
drop <commit2 sha-1> commit2 message
pick <commit3 sha-1> commit3 message
然后输入Esc键并输入:wq
.
现在commit2
被移除,你会发现commit3
的变化是基于commit1
.
在我的项目中,其中一个提交引入了一个我找不到的错误。我想忽略其中的所有内容并从其他提交继续。
Commit1:工作正常。
Commit2:不起作用。引入了一个错误。
Commit3:由于提交 2 上的错误而无法工作。
我的问题是如何在不更改提交 2 的情况下检出提交 3?
如果这是未推送的历史记录,您可以使用 git rebase --onto commit1 commit2 commit3
从历史记录中删除 commit2。如果这已经是已发布的历史记录,您应该使用 git revert commit2
恢复 commit2 的更改。或者,如果您只想在本地临时拥有它,您可以签出 commit3 然后执行 git revert commit2 -n
这也会撤消更改但不会创建提交。
与 Git 中的大多数操作一样,您可以使用多种方法来完成:
还原错误的提交
git revert <commit2>
如果这个错误的提交没有被推送到远程服务器(否则你最好恢复并立即推送以修复它!=),并且你想将你的工作保留在某个地方并稍后修复它,您还可以创建一个新的本地分支,挑选正确的提交并继续您的工作
git checkout -b "myNewBranch" <commit1> git cherry-pick <commit3>
如果你有不止一个 commit 到 cherry-pick,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
知道了这些,玩命令的时候就不要犹豫了,只要不push就安全了;)
您可以使用 interactive rebase 从提交历史 中删除 commit2
。详细步骤如下(假设 3 次提交在 master
分支上):
git checkout master
git rebase -i HEAD~3
然后会有互动展示window。输入 i
并将那里的提交更改为:
pick <commit1 sha-1> commit1 message
drop <commit2 sha-1> commit2 message
pick <commit3 sha-1> commit3 message
然后输入Esc键并输入:wq
.
现在commit2
被移除,你会发现commit3
的变化是基于commit1
.