如果我们只想推送它,我们应该在变基时把提交调高还是调低?

Should we put the commit higher or lower while rebasing if we want to push only it?

我拉到了master分支。在本地主人中,我做了几次承诺。现在我只想推送最后一次提交(而不是之前的提交)。我该如何实现?

我找到了一个关于如何操作的很好的解释:How to push only one commit with Git。所以,命令应该是这样的:

git push origin 2dc2b7e393e6b712ef103eaac81050b9693395a4:master

或者,更 "abstract" 的形式:

git push <remote name> <commit hash>:<remote branch name>

然而,据我所知,在一般情况下,它不会推送单个提交(由其哈希给出)。相反,它将推送指定的提交以及在指定提交之前完成的所有提交。

因此,为了实现目标(仅推送一个提交),我们首先需要重新排序提交,以便我们要推送的提交被视为最旧的提交(提交序列中的第一个) ).此处描述了如何操作:How to reorder commits with Git。这个描述很清楚,唯一让我感到困惑的是这句话:

In my case, I wanted to bring my top most commit where I fixed the project file down to the bottom so that I can push only that one commit to the remote server.

但是我们不就是想做一种相反的事情吗?如果我们提交 "down to the bottom",它将被视为最后一次(最近)提交,如果我们在推送时使用它的哈希值,我们将推送它之前的所有内容(这意味着 "all commits") .

所以,我们要做的是将我们的提交放在我们执行时看到的文件中更高的位置 git rebase -i HEAD~5。我说的对吗?

如果您只想将一个提交 cfoo 推送到一个分支 bbar,这里有一个简单的解决方案:

git fetch origin bbar
git checkout FETCH_HEAD
git cherry-pick cfoo
git push origin HEAD:bbar

在实际情况下,您可能需要 运行 git stash 或执行其他操作来备份解决方法。

至于"higher",是的,在git rebase -i之后弹出的文本编辑器中,第一行是最早的提交。如果你只想推送一个提交,那么把它放在第一行。