如果违规提交在私有存储库中,那么您想要做的事情并不是什么大问题.重写已发布的git历史记录会让您的协作者感到恼火,因此请确保删除此行是值得的.
该git-rebase文件有一个有用的通道.
Run Code Online (Sandbox Code Playgroud)git rebase [...] [<--onto newbase>] [<upstream>] [<branch>]也可以使用rebase删除一系列提交.如果我们有以下情况:
Run Code Online (Sandbox Code Playgroud)E---F---G---H---I---J topicA那么命令
Run Code Online (Sandbox Code Playgroud)git rebase --onto topicA~5 topicA~3 topicA会导致删除提交F和G:
Run Code Online (Sandbox Code Playgroud)E---H'---I'---J' topicA如果F和G在某种程度上存在缺陷,或者不应该成为其中的一部分,那么这很有用
topicA.请注意,参数--onto和上游参数可以是任何有效的commit-ish.
假设您的历史记录是线性的并且违规提交在您的主分支中,您可以通过运行来调整上面的示例
git rebase --onto 1f020~ 1f020 master
Run Code Online (Sandbox Code Playgroud)
对于更多的情况,使用交互式rebase.您可能会发现按照一个合并两个提交的示例很有帮助,但是不是用s壁球标记提交,而是删除整行以从历史记录中删除提交.
这有点复杂,但无论如何,这是它的方式:
分离头并移动到那个糟糕的提交后提交.使用git log查找1f020之后的下一次提交.
git checkout <SHA1-for-commit-just-after-bad-commit-1f020>
Run Code Online (Sandbox Code Playgroud)
移动HEAD只是在提交错误之前提交,但保留索引和工作树
git reset --soft <SHA1-for-just-previous-to-bad-commit-1f020>
Run Code Online (Sandbox Code Playgroud)
在重新使用提交消息的错误提交之后重做提交,但现在在提交之前提交错误提交.因此,删除那个错误的提交
git commit -C <SHA1-for-commit-just-after-bad-commit-1f020>
Run Code Online (Sandbox Code Playgroud)
重新应用从提交之后的提交到此新位置的所有内容
git rebase --onto HEAD <SHA1-for-commit-just-after-bad-commit-1f020> master
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8845 次 |
| 最近记录: |