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

问题描述 投票:0回答:7

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

这可能吗?

git commit push
7个回答
1401
投票

要将向上推送给定的提交,您可以编写:

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

前提是遥控器上已存在

<remotebranchname>
。 (如果没有,您可以使用
git push <remotename> <commit SHA>:refs/heads/<remotebranchname>
自动创建它。)

如果您想推送提交而不推送以前的提交,您应该首先使用

git rebase -i
重新排序提交。


135
投票

重新排序描述中缺少其他答案。

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

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

参考资料:

  1. http://blog.dennisrobinson.name/push-only-one-commit-with-git/
  2. http://blog.dennisrobinson.name/reorder-commits-with-git/

另请参阅:

  1. git:本地变基后重复提交,然后拉取
  2. git:推送单个提交、使用 rebase 重新排序、重复提交

27
投票

我建议使用

git rebase -i
;将您想要推送的提交移至您已做出的提交的顶部。然后使用
git log
获取重新基址提交的 SHA,检查并推送它。变基将确保您的所有其他提交现在都是您推送的提交的子项,因此未来的推送也将正常工作。


27
投票

在推送特定提交时,与所有其他方法相比,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 revert”回该提交,然后推送它。或者您可以

cherry-pick
提交到新分支,并将其推送到远程存储库上的分支。比如:

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

9
投票

完成此操作的最简单方法是使用两个命令。

首先,将本地目录设置为您想要的状态。然后,

git push origin +HEAD^:someBranch

仅删除远程中

someBranch
的最后一次提交,而不是本地。您可以连续执行几次此操作,或者更改
+HEAD^
以反映您想要从远程批量删除的提交数量。现在您可以重新站起来并使用

git push origin someBranch

正常更新遥控器。


3
投票

您也可以在另一个目录中:

  • git 克隆 [你的存储库]
  • 用您刚刚克隆的存储库的 .git 目录覆盖原始存储库中的 .git 目录。
  • git add 和 git commit 你的原始版本
© www.soinside.com 2019 - 2024. All rights reserved.