代码之家  ›  专栏  ›  技术社区  ›  Dave Mateer

Git-只推送最近提交给GitHub的内容

  •  29
  • Dave Mateer  · 技术社区  · 16 年前

    在我的本地git repo上,我有许多提交,其中包括“秘密”连接字符串:-)

    我不想在Github上看到这段历史。

    从本质上说,我想推动我拥有的一切,但想摆脱很多历史。

    也许我最好在一个分支中运行我的所有开发人员,然后在提交之前合并回master…那么大师的历史就是我想要的承诺。

    我试过运行rebase:

    git rebase –i HEAD~3

    返回3个提交,然后我可以删除一个提交。

    然而,遇到了汽车樱桃采摘失败,它变得相当复杂。

    任何想法都非常感谢…如果这太难了,历史和重新开始没有什么大不了的:(-)

    3 回复  |  直到 8 年前
        1
  •  57
  •   Greg Hewgill    16 年前

    您可以将当前工作分支,倒带主控形状,然后Cherry选择最新提交回主控形状:

    git branch secret
    git reset --hard HEAD~3
    git cherry-pick secret
    

    图画中,

        A--B--C--D--E (master)
    

    之后 git branch secret :

        A--B--C--D--E (master, secret)
    

    之后 git reset --hard HEAD~3 :

        A--B (master)
            \
             C--D--E (secret)
    

    之后 git cherry-pick secret 以下内容:

        A--B--E' (master)
            \
             C--D--E (secret)
    

    最后,如果你 git checkout secret; git rebase master 你可以得到:

        A--B--E' (master)
               \
                C--D (secret)
    
        2
  •  3
  •   Paschalis    9 年前

    脚本

    您克隆了一个项目,并为一个新特性进行了大量的提交,现在是时候开放源代码或共享它以供审查了。你不想让任何人看到你犯下的错误!

    原来的分支是 cloned_branch 你的脏乱承诺 dev 分支,并且您希望在 public_branch 分支机构。

    假设以下承诺:

    支路上 克隆的_分支 :

    sha0:实现了x和y(作者:authra)
    sha1:实现z。(作者:作者:作者)
    sha2:实现w.(作者:作者:作者)

    你创造 DEV 分支并推动一些承诺:

    sha3:尝试实现q功能。
    妈的,我不工作
    沙5:更糟!:。(
    沙6:成功了!!!!!
    沙哈:清理!

    将所有这些更改放在一个提交中 公共部门 :

    git checkout SHA2 -b public_branch      # new branch at `authorA`'s last commit
    git merge --squash SHA7        # squash commits up to your last one
    git commit -m "Implemented Q (author:me)"
    

    结果:

    分支 克氏支 DEV 像以前一样,而 公共部门 分支包含:

    sha0:实现了x和y(作者:authra)
    sha1:实现z。(作者:作者:作者)
    sha2:实现w.(作者:作者:作者)
    sha8:执行Q(作者:Me)

        3
  •  0
  •   Marcpek    8 年前

    我没有足够的声誉发表评论,所以我会发表一个答案。

    如果您有子模块,类似于Paschalis答案的方法提供了一个更稳定的选择。( cherry-pick 不考虑子模块)和最小化冲突(在我的例子中没有)。

    以下是我的首选方法:

    git checkout OLDSHA -b temp
    git merge --squash master
    git commit -m "All my work"
    

    在哪里? OLDSHA 是您认为可以安全地推送到公共存储库和 master 是包含您所有工作的分支。

    这将创建一个新分支( temp ,它“隐藏”(通过挤压)之间的所有历史 奥尔德沙 最近的承诺 主人 .新提交的消息将是“我的全部工作”。

    那么你就可以 删除 master并使temp成为新的master(在执行此操作之前,请确保master已安全地推送到另一个存储库或备份)

    git branch -d master
    git branch -m temp master
    

    然后推到一个新的遥控器,保持你的旧遥控器完好无损。

    git remote rm origin
    git remote add origin NEW_URL
    git push --set-upstream origin master
    
    推荐文章