【问题标题】:how to overwrite commit with new one on git? [duplicate]如何在 git 上用新的提交覆盖? [复制]
【发布时间】:2016-06-03 06:50:35
【问题描述】:

所以我正在与一个小组一起开展一个敏感项目,我们所有的资源都在 Github 上。我最近推送了一个提交,后来意识到我的推送中有很多错误。我已经在我的本地副本上修复了所有这些错误,并且即将再次推送。但是有什么方法可以推送和覆盖我的最后一次提交?我的理由是,我不希望其他人查看我的初始提交及其所做的更改...

基本上我想用我的新提交覆盖旧提交.. 所以没有关于旧提交的信息可供其他组成员查看。

任何帮助将不胜感激!谢谢。

注意:刚刚注意到这个问题被标记为重复。为了澄清,我的问题是关于覆盖已经推送的提交。我的问题不是关于更改不正确的提交消息。

【问题讨论】:

  • 你可以修改你的提交(git commit --amend),或者如果数据更敏感,help.github.com/articles/remove-sensitive-data 有说明。
  • 这正在改变历史。此外,由于您已经进行了另一次提交,因此这很可能会更加困难。为了将来参考,要更改您所做的最后一次提交,您可以使用git commit --amend;这也需要强制推动。
  • @ABMagil 我的问题与提交消息无关。它是关于变化和历史的。
  • a) 解决方案是一样的。 b) git 对提交消息的处理方式与您提交的代码更改相同。如果你想改变任何一个,就 git 而言,你正在改变历史。

标签: git github


【解决方案1】:

通常,一旦 Github(或公共 repo)上出现某些内容,就无法确保没有其他人有错误的提交。

如果您只是想要更简洁的代码历史记录,那么按照您的要求执行操作的方式需要您在本地和远程项目上覆盖历史记录。

如果您尚未使用更改创建新提交,您想要的是执行 git commit --amend 来修改旧提交。

如果您已经创建了一个新的提交,您需要使用 git rebase -i 将您的提交压缩到旧的之上。

在您在本地进行此更改并验证您的提交看起来符合您的要求后,您必须 git push --force 覆盖 Github 远程上的历史记录。

这是一个关于如何在 git 中重写历史的教程,它解释了this answer 中列出的两种方法。

【讨论】:

  • git push --force, 危险但喜欢它
  • 我最近遇到了类似的问题,但就我而言,我已经在本地进行了一些提交。解决方案是将它们压缩到一个单一的提交中并将 --force 推送到上游。好消息是我在 Github 上做一个 Pull Request 来掌握,它用新的历史和只有 1 次提交更新了 PR。这个question 帮助我实现了它。
【解决方案2】:

我不建议您这样做,因为 GIT 并不意味着删除和/或编辑提交。您可以只恢复之前的提交,然后再次提交“有效”代码。

或者你可以Rebase你的分行。 或者看看这个Answer

【讨论】:

  • “GIT 并不意味着删除和/或编辑提交” 我会说良好的开发实践建议不要采取此类行动,但 GIT 是“意味着”,因为它有能力并且有非常这样做的充分理由;就像提交不应该提交的敏感信息一样。
猜你喜欢
  • 2012-05-09
  • 2018-12-15
  • 2018-08-27
  • 2014-10-03
  • 2021-07-19
  • 1970-01-01
  • 2019-12-26
  • 2021-04-13
  • 1970-01-01
相关资源
最近更新 更多