我已经对不同的文件进行了多次提交,但到目前为止我只想将一个特定的提交推送到我的远程存储库。
这可能吗?
要将向上推送给定的提交,您可以编写:
git push <remotename> <commit SHA>:<remotebranchname>
前提是遥控器上已存在
<remotebranchname>
。 (如果没有,您可以使用 git push <remotename> <commit SHA>:refs/heads/<remotebranchname>
自动创建它。)
如果您想推送提交而不推送以前的提交,您应该首先使用
git rebase -i
重新排序提交。
重新排序描述中缺少其他答案。
git push <remotename> <commit SHA>:<remotebranchname>
将推送单个提交,但该提交必须是本地非推送提交中最旧的提交,不要与顶部、第一个或提示提交混淆,在我看来,这些都是不明确的描述。该提交必须是最旧的提交,即距离最近的提交最远的提交。如果它不是最旧的提交,那么从最旧的本地非推送 SHA 到指定 SHA 的所有提交都将被推送。要重新排序提交,请使用:
git rebase -i HEAD~xxx
重新排序提交后,您可以安全地将其推送到远程存储库。
总而言之,我使用了
git rebase -i HEAD~<number of commits to SHA>
git push origin <post-rebase SHA>:master
将单个提交推送到我的远程主分支。
参考资料:
另请参阅:
我建议使用
git rebase -i
;将您想要推送的提交移至您已做出的提交的顶部。然后使用 git log
获取重新基址提交的 SHA,检查并推送它。变基将确保您的所有其他提交现在都是您推送的提交的子项,因此未来的推送也将正常工作。
在推送特定提交时,与所有其他方法相比,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
即可看到一切都与您想要的一样。
我相信你必须“git revert”回该提交,然后推送它。或者您可以
cherry-pick
提交到新分支,并将其推送到远程存储库上的分支。比如:
git branch onecommit
git checkout onecommit
git cherry-pick 7300a6130d9447e18a931e898b64eefedea19544 # From the other branch
git push origin {branch}
完成此操作的最简单方法是使用两个命令。
首先,将本地目录设置为您想要的状态。然后,
git push origin +HEAD^:someBranch
仅删除远程中
someBranch
的最后一次提交,而不是本地。您可以连续执行几次此操作,或者更改 +HEAD^
以反映您想要从远程批量删除的提交数量。现在您可以重新站起来并使用
git push origin someBranch
正常更新遥控器。
您也可以在另一个目录中: