我已经对不同的文件进行了多次提交,但到目前为止,我只想将特定的提交推送到我的远程存储库。
这可能吗?
我相信你必须“git恢复”回该提交,然后推送它。或者你可以cherry-pick将提交到一个新分支,并将其推送到远程存储库上的分支。类似于:
cherry-pick
git branch onecommitgit checkout onecommitgit cherry-pick 7300a6130d9447e18a931e898b64eefedea19544 # From the other branchgit push origin {branch}
要推送一直到给定的提交,您可以编写:
git push <remotename> <commit SHA>:<remotebranchname>
如果<remotebranchname>已经存在于远程上。(如果没有,您可以使用git push <remotename> <commit SHA>:refs/heads/<remotebranchname>自动创建它。)
<remotebranchname>
git push <remotename> <commit SHA>:refs/heads/<remotebranchname>
如果你想推送一个提交没有来推送以前的提交,你应该首先使用git rebase -i来重新排序提交。
git rebase -i
我建议使用git rebase -i;将你要推送的提交移动到你已经提交的提交的顶部。然后使用git log获取重新基提交的SHA,检查它,然后推送。rebase将确保你所有其他提交现在都是你推送的提交的子提交,所以将来的推送也可以正常工作。
git log
与所有其他方法相比,Cherry-选择在推送特定提交时效果最好。
这样做的方法是:
创建一个新分支-
git branch <new-branch>
用你的原始分支更新你的新分支-
git fetch git rebase
这些行动将确保你拥有与你的起源完全相同的东西。
樱桃-选择sha id你想做推-
sha id
git cherry-pick <sha id of the commit>
您可以通过运行获得sha id
把它推到你的起源-
git push
运行gitk以查看所有内容看起来都与您想要的相同。
gitk
其他答案缺乏重新排序的描述。
将推送单个提交,但该提交必须是你本地非推送提交的最旧提交,不要与顶部、第一次或提示提交混淆,在我看来,这些都是模棱两可的描述。提交需要到你最旧的提交,即离你最近的提交最远的。如果它不是最旧的提交,那么从你最旧的本地非推送SHA到指定SHA的所有提交都将被推送。要重新排序提交,请使用:
git rebase -i HEAD~xxx
重新排序提交后,您可以安全地将其推送到远程存储库。
总而言之,我用
git rebase -i HEAD~<number of commits to SHA>git push origin <post-rebase SHA>:master
将单个提交推送到我的远程主分支。
参考文献:
另见:
您也可以在另一个目录中:
完成此操作的最简单方法是使用两个命令。
首先,让本地目录进入您想要的状态。然后,
git push origin +HEAD^:someBranch
仅从远程中的someBranch中删除最后一次提交,而不是本地。您可以连续执行几次,或者更改+HEAD^以反映您要从远程批量删除的提交数。现在您重新站起来,并使用
someBranch
+HEAD^
git push origin someBranch
正常更新遥控器。
我只是用
git chury-的选择'shaid的承诺'
然后
git推送
在我的例子中,我的本地分支名称是'master',远程默认分支名称也是'master'。