【问题标题】:Git - push to new remote with a single consolidated commitGit - 通过单个合并提交推送到新的远程
【发布时间】:2012-06-07 18:52:05
【问题描述】:

我已经在私人仓库上工作了一段时间,并将发布到 GitHub。

问题是我有很多提交,为了卫生起见,我希望只有一个提交出现在 GitHub 中。

如何在不推送历史的情况下推送?即将整个 MASTER 合并到一个提交中

非常感谢。

道格

【问题讨论】:

    标签: git version-control git-push


    【解决方案1】:

    通常会使用git rebase --interactive HEAD~n,其中 n 是编号。您想要合并为一个的提交。但是,在您的情况下,您希望将整个历史记录压缩到一个提交中,并且由于不可能在没有父级的情况下进行变基(直到初始提交),我们必须使用 git resetgit commit --amend

    这就是你要做的:

    1. git log --oneline。查找初始提交的 SHA。
    2. 假设我们的 SHA 是fe7d5d1。运行git reset fe7d5d1。这会将分支重置为初始提交。
    3. 现在使用 git add . 暂存您的所有更改。
    4. 接下来修改您的初始提交,git commit --amend -m "Initial commit"
    5. 使用git log --oneline 确认您现在只有一个提交。

    注意:切勿重写/压缩/rebase 已推送到远程仓库的提交。

    【讨论】:

    • 如果我将整个历史推送到 bitbucket 的私有仓库,但只想将当前状态(即重新定位)推送到 github,该怎么办?
    • 我们的想法是永远不要重写已经传播给其他人的历史。在您的情况下,如果只有您可以访问私有仓库,那么重新设置基准是安全的。
    • 我不能只重写 GitHub 存储库的历史记录并保留 BitBucket 的历史记录吗?即“提交”我当前的所有更改作为一次提交?
    • 我不会推荐这样的工作流程。事实上,我认为这种将所有提交压缩为一体的活动是一次性的。你不想一直这样做。将 2-3 个相关的提交压缩为一个很常见,但不是整个分支。提交历史很重要,必须始终维护。
    【解决方案2】:

    查看 git rebase。交互模式。

    【讨论】:

      猜你喜欢
      • 2015-06-07
      • 2018-11-02
      • 2013-04-08
      • 2015-07-15
      • 2017-02-20
      • 1970-01-01
      • 2010-12-19
      • 2017-04-11
      • 2014-01-05
      相关资源
      最近更新 更多