Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 我需要跳出来扔掉一个“垃圾桶”;“中”;在我的主分支中提交。我怎么做?_Git_Github_Git Rebase_Git Reset_Git Revert - Fatal编程技术网

Git 我需要跳出来扔掉一个“垃圾桶”;“中”;在我的主分支中提交。我怎么做?

Git 我需要跳出来扔掉一个“垃圾桶”;“中”;在我的主分支中提交。我怎么做?,git,github,git-rebase,git-reset,git-revert,Git,Github,Git Rebase,Git Reset,Git Revert,例如,在下面的主分支中,我只需要丢弃提交AF5C7BF16E6F04321F966B4231371B2147BC4DA,这是由于以前的重基而导致的第二个: commit 60b413512e616997c8b929012cf9ca56bf5c9113 Author: Luca G. Soave <luca.soave@gmail.com> Date: Tue Apr 12 23:50:15 2011 +0200 add generic config/initialize

例如,在下面的主分支中,我只需要丢弃提交AF5C7BF16E6F04321F966B4231371B2147BC4DA,这是由于以前的重基而导致的第二个:

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'
提交60b413512e616997c8b929012cf9ca56bf5c9113
作者:Luca G.Soave
日期:2011年4月12日星期二23:50:15+0200
添加通用配置/initializers/omniauth.example.rb
提交af5c7bf16e6f04321f966b4231371b21475bc4da
作者:Luca G.Soave
日期:2011年4月22日星期五00:15:50+0200
显示github用户信息(如果已记录)
提交e6523efada4d75084e81971c4dc2aec621d45530
作者:Luca G.Soave
日期:2011年4月22日星期五17:20:48+0200
在blueprint布局中添加多个.container
提交414Ceffc40EA4AC36CA68E6DD0A9EE97E7322
作者:Luca G.Soave
日期:周四2011年4月21日19:55:57+0200
添加%h1 Fantastic Logo+。适用于“使用Github登录”
我需要保持冷静

  • 第一次提交60b413512e616997c8b929012cf9ca56bf5c9113
  • 第三次提交e6523efada4d75084e81971c4dc2aec621d45530和
  • 最后一次提交414ceffc40ea4ac36ca68e6dd0a9ee97e73dee22
“丢弃”第二次提交af5c7bf16e6f04321f966b4231371b21475bc4da

我该怎么做? 提前谢谢
Luca

如果重新设置基础是一个选项,您可以重新设置基础并将其删除:

$ git rebase -i 414ceffc^
如果不选择重设基础,则可以将其还原:

$ git revert af5c7bf16

重设基础恢复是选项。Rebase实际上会从历史记录中删除提交,因此看起来第二次提交根本不存在。如果您将主分支机构推出任何其他回购,这将是一个问题。在这种情况下,如果您尝试在重新基址后推送,git将给您一个拒绝非快进合并错误

当分支机构已与其他回购共享时,恢复是正确的解决方案
git revert af5c7bf16
将进行一次新的提交,该提交只会撤销af5c7bf16引入的更改。这样历史就不会被改写,你就可以保持错误的清晰记录,其他回购协议也会接受

这里有一个很好的擦除方法:
git-rebase-i^

这会将您带到要删除的提交之前的提交。交互式编辑器将向您显示返回到该点的所有提交的列表。您可以拾取、挤压等。在这种情况下,删除要删除并保存文件的提交行。Rebase将完成它的工作。

尽管在这里收到了所有原始答案,但我发现他们没有令人满意地回答这个问题。如果您发现自己处于需要从历史记录中间删除提交或提交集合的情况下,我建议:

  • 在包含所有提交的分支的开头创建一个新分支,并切换到该分支
  • 将新分支恢复到要从其开始新基础的点
  • 然后,(这里是关键点)切记选择您实际想要应用的后续提交,从原始分支到新分支,并跳过您不再想要的提交(即您正在删除的提交)
  • 如果需要,将原始分支重命名为指示其旧代码的名称,然后将新分支重命名为原始分支的名称
  • 最后,将更改推送到远程回购(如果使用)。您可能需要使用“强制推送”。如果您的合作者在获取修订时遇到问题,那么他们可能最容易从远程源再次克隆repo。不管怎么说,如果你要从你的历史中撕碎承诺,你可能会想和他们谈谈
以下是关于樱桃采摘的信息:

这里有一些关于使用龟甲Git(正如我刚才所做的那样)的介绍。对于这类操作,使用gui实用程序显然更容易!

如果我得到了“git rebase 414ceffc”,这是较旧的第四次提交,那么我也会失去第三次e6523和第一次60b41?@Luca G.Soave:如果你特别告诉
git rebase
放弃提交(通过在交互模式下运行
rebase
并删除其条目),你只会“丢失”一次提交。谢谢mipadi,我把我的票投给杰科顿,基本上是为了广泛的解释,即使你们两个说了同样的话。。。再次感谢。如果我选择重新设置基础,什么是正确的承诺重新设置基础?我只需要放下第二个…@BBJ3看看米帕迪的答案。这应该是最重要的答案!使用cherry pick的好方法,当您想要“跳过”多个提交时,此解决方案甚至更好。不是真正解决原始问题。虽然建议的解决方案有效,但它更耗时/笨拙,而且IMO没有带来任何好处。如果分支已经被推送(并在野外使用),那么恢复策略可能就是答案。如果不是,我会使用重设interactive的基础并删除有问题的提交。如果它被推了,但我们知道它没有被任何人使用,你仍然可以通过一个重基然后一个强制推来逃脱。