[英]I need to put my most recent 10 commits on a separate branch. Then I want to work off the commit directly before these 10 on master
[英]I need to pop up and trash away a “middle” commit in my master branch. How can I do it?
例如,在下面的主分支中,我需要删除提交af5c7bf16e6f04321f966b4231371b21475bc4da,这是由于之前的rebase导致的第二个:
commit 60b413512e616997c8b929012cf9ca56bf5c9113
Author: Luca G. Soave <luca.soave@gmail.com>
Date: Tue Apr 12 23:50:15 2011 +0200
add generic config/initializers/omniauth.example.rb
commit af5c7bf16e6f04321f966b4231371b21475bc4da
Author: Luca G. Soave <luca.soave@gmail.com>
Date: Fri Apr 22 00:15:50 2011 +0200
show github user info if logged
commit e6523efada4d75084e81971c4dc2aec621d45530
Author: Luca G. Soave <luca.soave@gmail.com>
Date: Fri Apr 22 17:20:48 2011 +0200
add multiple .container at blueprint layout
commit 414ceffc40ea4ac36ca68e6dd0a9ee97e73dee22
Author: Luca G. Soave <luca.soave@gmail.com>
Date: Thu Apr 21 19:55:57 2011 +0200
add %h1 Fantastic Logo + .right for 'Sign in with Github'
我需要保持健康
“扔掉”只是第二次提交af5c7bf16e6f04321f966b4231371b21475bc4da
我怎样才能做到这一点? 在此先感谢Luca
Rebase或revert是选项。 Rebase实际上会从历史记录中删除提交,因此看起来第二次提交从未存在过。 如果您将主分支推送到任何其他存储库,这将是一个问题。 如果在这种情况下尝试推送一个rebase,git会给你一个拒绝非快进合并错误。
当分支与其他repos共享时,Revert是正确的解决方案。 git revert af5c7bf16
将进行一个新的提交,简单地反转af5c7bf16引入的更改。 这种方式历史不会被重写,你保持清楚的错误记录,其他的回购将接受推动。
这是一个很好的擦除方法: git rebase -i <commit>^
这会将您带到要删除的提交之前的提交。 交互式编辑器将显示返回该点的所有提交的列表。 您可以选择,压缩等。在这种情况下, 删除要删除的提交行并保存文件。 Rebase将完成其工作。
如果rebase是一个选项,你可以改变并删除它:
$ git rebase -i 414ceffc^
如果不能选择rebase,你可以恢复它:
$ git revert af5c7bf16
尽管这里收到了原始答案的所有功劳,但我并没有发现它们能够令人满意地回答这个问题。 如果您发现自己处于需要从历史中间删除提交或提交集合的情况,我建议这样做:
这里有关于Cherry Picking的信息: 使用git意味着采摘樱桃是什么意思?
这里有一些用Tortoise Git做的(正如我刚才所做的那样)。 在这些操作中使用gui实用程序肯定更容易! Cherry挑选使用TortoiseGit
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.