我已经对不同的文件进行了几次提交,但到目前为止,我想将我的远程存储库推送到特定的提交 .
那可能吗?
尝试了建议的解决方案:
git push <remotename> <commit SHA>:<remotebranchname>
像这样:
git push origin 712acff81033eddc90bb2b45e1e4cd031fefc50f:master
在我的情况下,master提前5次提交,我只是想推送我的最后一次提交,但上面的内容最终推动了我的所有更改,包括命名提交 . 在我看来,樱桃挑选方法可能是这个用例的更好方法 .
其他答案缺乏重新排序的描述 .
将推送单个提交,但该提交必须是您的本地,非推送,提交的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
将单个提交推送到我的远程主分支 .
参考文献:
http://blog.dennisrobinson.name/push-only-one-commit-with-git/
http://blog.dennisrobinson.name/reorder-commits-with-git/
也可以看看:
git: Duplicate Commits After Local Rebase Followed by Pull
git: Pushing Single Commits, Reordering with rebase, Duplicate Commits
我相信你必须"git revert"回到那个提交然后再推它 . 或者你可以 cherry-pick 提交到一个新分支,并将其推送到远程仓库上的分支 . 就像是 :
cherry-pick
git branch onecommit git checkout onecommit git cherry-pick 7300a6130d9447e18a931e898b64eefedea19544 # From the other branch git push origin {branch}
要推进给定的提交,您可以写:
已提供 <remotebranchname> 已存在于遥控器上 . (如果没有,您可以使用 git push <remotename> <commit SHA>:refs/heads/<remotebranchname> 自动创建它 . )
<remotebranchname>
git push <remotename> <commit SHA>:refs/heads/<remotebranchname>
如果要在不推送先前提交的情况下推送提交,则应首先使用 git rebase -i 重新提交提交 .
git rebase -i
EDIT
更详细地了解该怎么做检查@ Samuel的答案:https://stackoverflow.com/a/27907287/889213
在推送特定提交时,Cherry-pick与所有其他方法相比效果最佳 .
这样做的方法是:
创建一个新分支 -
git branch <new-branch>
使用您的原始分支更新您的新分支 -
git fetch git rebase
这些操作将确保您完全拥有与原点相同的东西 .
樱桃挑选你要推的 sha id -
sha id
git cherry-pick <sha id of the commit>
您可以通过运行获得 sha id
git log
把它推到你的原点 -
git push
运行 gitk 以查看所有内容都与您想要的一样 .
gitk
我建议使用 git rebase -i ;将您想要推送的提交移动到您所做的提交的顶部 . 然后使用 git log 获取重新提交的SHA的SHA,检查它并推送它 . rebase将确保您所有其他提交现在都是您推送的提交的子项,因此未来的推送也可以正常工作 .
6 回答
尝试了建议的解决方案:
git push <remotename> <commit SHA>:<remotebranchname>
像这样:
git push origin 712acff81033eddc90bb2b45e1e4cd031fefc50f:master
在我的情况下,master提前5次提交,我只是想推送我的最后一次提交,但上面的内容最终推动了我的所有更改,包括命名提交 . 在我看来,樱桃挑选方法可能是这个用例的更好方法 .
其他答案缺乏重新排序的描述 .
将推送单个提交,但该提交必须是您的本地,非推送,提交的OLDEST,不要与top,first或tip提交混淆,在我看来这些都是模棱两可的描述 . 提交需要最早的提交,即距离最近提交最远的提交 . 如果它不是最早的提交,则将推送从最旧的,本地的,未推送的SHA到指定的SHA的所有提交 . 要重新排序提交使用:
重新排序提交后,您可以安全地将其推送到远程存储库 .
总结一下,我用过
将单个提交推送到我的远程主分支 .
参考文献:
http://blog.dennisrobinson.name/push-only-one-commit-with-git/
http://blog.dennisrobinson.name/reorder-commits-with-git/
也可以看看:
git: Duplicate Commits After Local Rebase Followed by Pull
git: Pushing Single Commits, Reordering with rebase, Duplicate Commits
我相信你必须"git revert"回到那个提交然后再推它 . 或者你可以
cherry-pick
提交到一个新分支,并将其推送到远程仓库上的分支 . 就像是 :要推进给定的提交,您可以写:
已提供
<remotebranchname>
已存在于遥控器上 . (如果没有,您可以使用git push <remotename> <commit SHA>:refs/heads/<remotebranchname>
自动创建它 . )如果要在不推送先前提交的情况下推送提交,则应首先使用
git rebase -i
重新提交提交 .EDIT
更详细地了解该怎么做检查@ Samuel的答案:https://stackoverflow.com/a/27907287/889213
参考文献:
http://blog.dennisrobinson.name/push-only-one-commit-with-git/
http://blog.dennisrobinson.name/reorder-commits-with-git/
在推送特定提交时,Cherry-pick与所有其他方法相比效果最佳 .
这样做的方法是:
创建一个新分支 -
使用您的原始分支更新您的新分支 -
这些操作将确保您完全拥有与原点相同的东西 .
樱桃挑选你要推的
sha id
-您可以通过运行获得
sha id
把它推到你的原点 -
运行
gitk
以查看所有内容都与您想要的一样 .我建议使用
git rebase -i
;将您想要推送的提交移动到您所做的提交的顶部 . 然后使用git log
获取重新提交的SHA的SHA,检查它并推送它 . rebase将确保您所有其他提交现在都是您推送的提交的子项,因此未来的推送也可以正常工作 .