此问题显示如何推送到主分支的提交(例如,特定提交的所有父提交):
How can I pushing specific commit to a remote, and not the previous commits?
答案是:
git push <remotename> <commit SHA>:<remotebranchname>
所以你可以使用git push origin <commit SHA>:master
但是,我想自动将该提交推送到匹配的远程分支。
我不能只使用git push <remotename> "<commit SHA>:$(git branch)"
,因为git branch返回本地分支,我想拥有匹配的远程分支(例如,您可以将本地主branch
映射到映射到远程prod
分支。我想考虑到这一点。
答案 0 :(得分:0)
由于Git的工作方式,提交并不明确属于分支。分支只是指向位于全局历史树中某处的提交的指针,因此当您想要将某个提交单独推送到远程分支时,该提交不会说明您可能意味着哪个分支。
您唯一能做的就是使用git branch --contains
找到包含提交的分支。如果它只返回一个分支,那么你很幸运,一切都很清楚但是如果多个分支可以访问提交,那么命令可能会返回多个分支。对于其他所有内容,例如跟踪分支,您必须查看存储库的配置。
但是,您的工作流程对我来说似乎有点奇怪。如果您一直希望推送旧的提交而不是当前的分支,那么您应该做的是创建一个新的分支。有一个分支与你可以推动的远程分支相匹配;并且有另一个分支领先于您的开发发生的分支。每当您想要更新遥控器时,您都会更新与遥控器匹配的本地分支,然后只需按下该分支。
所以你的历史会是这样的:
prod master
↓ ↓
* -- * -- * -- * -- * -- * -- * -- *
你可以使用prod
推送git push origin prod
,然后解决实际上落后的远程跟踪分支。