首页 文章

如何将特定提交推送到远程,而不是之前的提交?

提问于
浏览
691

我已经对不同的文件进行了几次提交,但到目前为止,我想将我的远程存储库推送到特定的提交 .

那可能吗?

6 回答

  • 869

    尝试了建议的解决方案:

    git push <remotename> <commit SHA>:<remotebranchname>

    像这样:

    git push origin 712acff81033eddc90bb2b45e1e4cd031fefc50f:master

    在我的情况下,master提前5次提交,我只是想推送我的最后一次提交,但上面的内容最终推动了我的所有更改,包括命名提交 . 在我看来,樱桃挑选方法可能是这个用例的更好方法 .

  • 53

    其他答案缺乏重新排序的描述 .

    git push <remotename> <commit SHA>:<remotebranchname>
    

    将推送单个提交,但该提交必须是您的本地,非推送,提交的OLDEST,不要与top,first或tip提交混淆,在我看来这些都是模棱两可的描述 . 提交需要最早的提交,即距离最近提交最远的提交 . 如果它不是最早的提交,则将推送从最旧的,本地的,未推送的SHA到指定的SHA的所有提交 . 要重新排序提交使用:

    git rebase -i HEAD~xxx
    

    重新排序提交后,您可以安全地将其推送到远程存储库 .

    总结一下,我用过

    git rebase -i HEAD~<number of commits to SHA>
    git push origin <post-rebase SHA>:master
    

    将单个提交推送到我的远程主分支 .

    参考文献:

    也可以看看:

  • 7

    我相信你必须"git revert"回到那个提交然后再推它 . 或者你可以 cherry-pick 提交到一个新分支,并将其推送到远程仓库上的分支 . 就像是 :

    git branch onecommit
    git checkout onecommit
    git cherry-pick 7300a6130d9447e18a931e898b64eefedea19544 # From the other branch
    git push origin {branch}
    
  • 25

    要推进给定的提交,您可以写:

    git push <remotename> <commit SHA>:<remotebranchname>
    

    已提供 <remotebranchname> 已存在于遥控器上 . (如果没有,您可以使用 git push <remotename> <commit SHA>:refs/heads/<remotebranchname> 自动创建它 . )

    如果要在不推送先前提交的情况下推送提交,则应首先使用 git rebase -i 重新提交提交 .

    EDIT

    更详细地了解该怎么做检查@ Samuel的答案:https://stackoverflow.com/a/27907287/889213

    参考文献:

  • 127

    在推送特定提交时,Cherry-pick与所有其他方法相比效果最佳 .

    这样做的方法是:

    创建一个新分支 -

    git branch <new-branch>
    

    使用您的原始分支更新您的新分支 -

    git fetch
    
    git rebase
    

    这些操作将确保您完全拥有与原点相同的东西 .

    樱桃挑选你要推的 sha id -

    git cherry-pick <sha id of the commit>
    

    您可以通过运行获得 sha id

    git log
    

    把它推到你的原点 -

    git push
    

    运行 gitk 以查看所有内容都与您想要的一样 .

  • 19

    我建议使用 git rebase -i ;将您想要推送的提交移动到您所做的提交的顶部 . 然后使用 git log 获取重新提交的SHA的SHA,检查它并推送它 . rebase将确保您所有其他提交现在都是您推送的提交的子项,因此未来的推送也可以正常工作 .

相关问题